引用 Shell32.dll?

Referencing Shell32.dll?

我没有 .NET 4.5 来解压 zip 文件,所以我使用 Shell32 就像 this。但是当我像这样引用 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.

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

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

/lib:dir1[,dir2] Compiler option.

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

中添加对 DLL 的引用

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

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