3

ファイルを解凍する機能を備えた .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 を正しく参照していませんか?

4

1 に答える 1

0

ファイルまたはアセンブリ'Interop.Shell32、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

参照がアセンブリにロードされました。しかし、アプリケーションはCOMの依存関係を見つけることができません。

メインの実行可能ファイルのルートに「Interop.Shell32.dll」が必要です。

そのために、Visual Studioでは、参照をクリックしたときに「ローカルコピー」というオプションがあります。これをtrueに設定するだけで、依存関係は次のビルドでアプリケーションフォルダーにコピーされます。

次に、ビルドフォルダーにあるライブラリファイルを使用してアプリケーションを実行できます。

于 2012-11-24T03:19:17.183 に答える