web-dev-qa-db-ja.com

System.IO.FileNotFoundException:アプリケーションのデプロイ時にファイルまたはアセンブリ 'X'またはその依存関係の1つをロードできませんでした

マネージC++で記述されたアセンブリを参照するアプリケーションの展開に奇妙な問題があります。

Assembly Xを作成し、コンパイルして、Starterというexeファイルで参照しました。

Starter.exeは、ローカルのマシンで正常に起動します。ただし、スターターデバッグフォルダーのすべてのコンテンツを仮想マシンにコピーし、そこから起動しようとすると、次の例外でクラッシュします。

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or 
Assembly 'X' or one of its dependencies. The specified module could not be found.

XはStarter.exeと同じフォルダにあるため、これは意味がありません。

この問題の原因は何ですか?

[〜#〜] update [〜#〜]

ターゲットマシン上のReflectorの依存関係を調べましたが、それらすべてのファイルを見つけることができました。

また、すべてのプロジェクトの構成をx86/win32に変更しました。

[〜#〜] update [〜#〜]

Fusion Logのログ(場所:C:\ FusionLog\Default\Starter.exe\X、Version = 1.0.4538.22813、Culture = neutral、PublicKeyToken = null.HTM):

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling Assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe.Config
LOG: Using Host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based Assembly bind).
LOG: Attempting download of new URL file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/X.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns Assembly from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.
LOG: Assembly is loaded in default load context.

エラーはC:\ FusionLog\NativeImage\Starter.exe \ディレクトリにあります。

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = BookmarkWiz.Kernel, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling Assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null.
WRN: No matching native image found.
LOG: IL Assembly loaded from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.

署名されていない他のいくつかのアセンブリを参照しているため、アセンブリに署名できません

24
Arsen Zahray

...ファイルまたはアセンブリ 'X'またはの依存関係の1つをロードできませんでした...

ほとんどの場合、別の依存関係の読み込みに失敗します。

依存関係ウォーカーを使用して依存関係を確認してみてください。

つまり: http://www.dependencywalker.com/

ビルド構成も確認してください(x86/64)

編集:「信頼できない」ネットワーク共有からZipでdllをコピーしていたときに、この問題が一度発生しました。ファイルはWindowsによってロックされ、FileNotFoundExceptionが発生しました。

こちらをご覧ください: インターネットからDLLを検出し、CASPOL によって「ブロック」されたDLL

16
flayn

DLLの名前を変更して、この問題を解決しました。 DLLは、共有場所にアップロードされたときに手動で名前が変更されていました(ファイル名にバージョン番号が追加されました)。ダウンロードしたファイルからバージョン番号を削除すると、問題が解決しました。

4
Ags1

同じ問題がありました。私にとっては、プロジェクトフォルダーの.vsディレクトリを削除するのに役立ちました。

2
BonifatiusK