引用Shell32.dll?

时间:2016-08-20 10:30:21

标签: c# compiler-errors csc shell32.dll

我没有.NET 4.5来解压缩zip文件,所以我使用Shell32之类的csc.exe /r:"C:\Windows\System32\shell32.dll" ... 。但是当我像这样引用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. '

我收到此错误:

csc.exe

更新:如果没有Visual Studio,只需func MusicEventIteratorGetEventInfo(_ inIterator: MusicEventIterator, _ outTimeStamp: UnsafeMutablePointer<MusicTimeStamp>, _ outEventType: UnsafeMutablePointer<MusicEventType>, _ outEventData: UnsafeMutablePointer<UnsafeRawPointer?>, _ outEventDataSize: UnsafeMutablePointer<UInt32>) -> OSStatus

2 个答案:

答案 0 :(得分:2)

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

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

使用IDE或MSBuild.exe当然是明智的选择。也帮助您陷入成功之中,真的想要使用嵌入互操作类型功能,因此您不需要在运行时使用互操作程序集,也不必部署它。查看MSBuild生成的构建命令很有用。

答案 1 :(得分:1)

可能是因为您试图像.NET程序集一样引用它。

我会尝试使用/ lib:参数来包含程序集,而不是......

/lib:dir1[,dir2] Compiler option.