c# - 引用Shell32.dll?

标签 c# compiler-errors csc shell32.dll

我没有.NET 4.5解压缩zip文件,因此我正在使用this之类的Shell32。但是当我像这样引用dll时:

csc.exe /r:"C:\Windows\System32\shell32.dll" ...

我收到此错误:
fatal error CS0009: Metadata file 'c:\Windows\System32\shell32.dll' could not be opened -- 'An attempt was made to load
    a program with an incorrect format. '

更新:没有Visual Studio,只有csc.exe

最佳答案

Shell32是可以在C#程序中使用的COM服务器。但是,您必须首先生成一个互操作程序集,才能将shell32.dll中的类型库(与.NET元数据相同)转换为CLR可以理解的声明。可以通过running Tlbimp.exe或更简单地通过在IDE中添加对DLL的引用来实现。

只要您从命令行执行此操作,并且不使用msbuild来编译.csproj项目文件,则必须执行与msbuild相同的操作,运行tlbimp。对于shell32.dll,此操作仅需要执行一次,您可以在源代码管理中检入interop库,因此您无需再次执行此操作。在互操作库上使用/r。

使用IDE或MSBuild.exe当然是明智的选择。它还可以帮助您落入成功之路,您确实想使用Embed Interop Types功能,因此您在运行时不需要interop程序集,也不必部署它。查看由MSBuild生成的生成命令很有用。

关于c# - 引用Shell32.dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39053073/

相关文章:

c# - 获取 Oracle 匿名 block 中更新或删除的记录

android - 错误 :res\menu\main. xml:15:错误:在包 'actionProviderClass' 中找不到属性 'android' 的资源标识符

c# - 命令行 C# 编译有什么意义?

c# - Visual Studio 2019 的 CSC 警告 CS1668

c# - 处理镜像继承树

C#:定期检查文件夹的变化?

c# - 在 ASP.NET 中为 OAuth2 创建重定向 URI

c++ - 标准库和GCC的CLion链接器错误

java - 找不到符号 HttpClient

api - 是否有任何免费的自定义搜索API(例如Google自定义搜索)?