Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用Shell32.dll?_C#_Compiler Errors_Csc_Shell32.dll - Fatal编程技术网

C# 引用Shell32.dll?

C# 引用Shell32.dll?,c#,compiler-errors,csc,shell32.dll,C#,Compiler Errors,Csc,Shell32.dll,我没有.NET4.5来解压zip文件,所以我使用的是Shell32like。但是当我像这样引用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

我没有.NET4.5来解压zip文件,所以我使用的是
Shell32
like。但是当我像这样引用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:参数包含程序集,而不是按照


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

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


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

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


使用IDE或MSBuild.exe当然是明智的选择。另外,如果您真的想使用嵌入互操作类型功能,那么就不需要在运行时使用互操作程序集,也不必部署它,这也有助于您获得成功。查看MSBuild生成的build命令非常有用。

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

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


使用IDE或MSBuild.exe当然是明智的选择。另外,如果您真的想使用嵌入互操作类型功能,那么就不需要在运行时使用互操作程序集,也不必部署它,这也有助于您获得成功。查看MSBuild生成的生成命令很有用。

您还可以使用
Process.Start
运行与应用程序捆绑在一起的某种
unzip.exe
。Windows zipper不完美,因此您可能会遇到更多外来软件包的问题。哦,由于.NET 2.0您可以使用,但据我记忆,它有一些错误。@PTwr这就是我到目前为止一直在做的
Process.Start(@“cmd.ex/C powershell.exe-nologo-noprofile-command”“&{Add Type-A'System.IO.Compression.FileSystem';[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip','bar');}'')
。它可以工作,但我只是想知道是否还有其他解决方案。同样
gzip流
也可以工作。您也可以使用
进程。启动
来运行与应用程序捆绑在一起的某种
解压.exe
。Windows拉链不完美,因此您可能会遇到更多外来软件包的问题。哦,既然您可以使用.NET 2.0,但是从我记忆中看,它有一些错误。@PTwr到目前为止我一直在做的就是
Process.Start(@“cmd.ex/C powershell.exe-nologo-noprofile-command”“&{Add Type-A'System.IO.Compression.FileSystem';[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip',bar');}”“)
。它可以工作,但我只是想知道是否有其他解决方案。而且
gzip流
也可以工作。