我没有.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/