Shell32.dll引用导致问题

时间:2012-11-24 02:58:34

标签: c# unzip windows-shell codedom

我正在使用.NET Framework 3.5在C#中创建一个具有解压缩文件功能的应用程序;但是,当我运行它时,一旦它进入解压缩方法,它就会因Windows“停止工作”错误而崩溃。它不读取方法中的任何行,只是在输入时崩溃。

Description:
Stopped working

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   test.exe
Problem Signature 02:   0.0.0.0
Problem Signature 03:   50b03509
Problem Signature 04:   Test
Problem Signature 05:   0.0.0.0
Problem Signature 06:   50b03509
Problem Signature 07:   1
Problem Signature 08:   38
Problem Signature 09:   System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033

使用“已停止的工作菜单”中的调试功能后,我收到此错误。

Could not load file or assembly 'Interop.Shell32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我使用此代码在CodeDom编译器中导入Shell32.dll。

Params.ReferencedAssemblies.Add("Interop.Shell32.dll");

以下是在崩溃的方法中解压缩文件的代码。

Shell32.ShellClass sc = new Shell32.ShellClass();
                Shell32.Folder SrcFlder = sc.NameSpace(source);
                Shell32.Folder DestFlder = sc.NameSpace(dest);
                Shell32.FolderItems items = SrcFlder.Items();
                DestFlder.CopyHere(items, 20); 

我不确定为什么会这样。它在原始应用程序中完美运行,但是当我使用CodeDom编译它(生成没有错误)并运行它时会发生这种情况。我没有正确引用COM吗?

1 个答案:

答案 0 :(得分:0)

  

无法加载文件或程序集'Interop.Shell32,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = null'或其依赖项之一。该   系统找不到指定的文件。

引用已加载到程序集中。但是您的应用程序无法找到您的COM依赖项。

您需要在主可执行文件的根目录下安装“Interop.Shell32.dll”。

为此,在Visual Studio上,我们在单击引用时有一个选项,是“Copy Local” - 仅将其设置为true,并且依赖项将被复制到下一个构建的应用程序文件夹中。 / p>

然后,您可以使用构建文件夹中的库文件运行您的应用程序。