0

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

4

2 回答 2

3

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

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

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

于 2016-08-20T12:45:14.303 回答
1

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

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

/lib:dir1[,dir2]编译器选项。

于 2016-08-20T11:19:44.470 回答