web-dev-qa-db-ja.com

「ファイルまたはアセンブリをロードできませんでした」ランタイムエラーをデバッグする方法

[〜#〜] ikvm [〜#〜] を使用して変換されたJavaライブラリを使用するプロジェクトがあります。作成したDLLとすべての可能なIKVM DLLをプロジェクトへの参照として追加しましたが、実行すると、次のランタイムエラーが発生します。

System.IO.FileNotFoundException:ファイルまたはアセンブリ「コア、バージョン= 0.0.0.0、カルチャ=ニュートラル、PublicKeyToken = null」またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

このエラーのデバッグ方法は本当にわかりません。欠落しているタイプを正確に知る方法はありますか?説明から、これは生成されたDLL(Java libから)だと思いますが、参照として適切に追加しました。

他に何が間違っていますか?

29
Wookai

Fusion Log Viewer を使用して、.NETアプリでのアセンブリの読み込みの問題をデバッグできます。

また、 Process Monitor は、一般的なファイル読み込みの問題を特定するのに非常に役立ちます。

21
Tim Barrass

Dependency WalkerとFusion Log Viewerを鳴らすだけでは、ネイティブコードとマネージコードを一緒に持つアプリケーションや、ネイティブコードの動的ロードを行うアプリケーションではうまく機能しません。これらのシナリオをカバーするプロセスモニターを使用して、不足している(または無効なアクセス許可)アセンブリエラーを解決する方法を段階的に説明する良い投稿があります。

デバッグがファイルまたはアセンブリをロードできなかったか、プロセスモニターでその依存関係エラーの1つ

投稿には、このタスクの一部を自動化するツールも含まれています

6
devshorts

これは、Fusion Log Viewer(Microsoft SDKで利用可能)を使用して診断できます。管理者でそれを起動し、設定でログをアクティブ化します。

参照の読み込みに関するすべての情報(およびそのすべての参照)がログに記録されます。欠落している参照と、それがどこで検索されたかを明示します。

Fusion Log ViewerのMSDN

5
Nekresh

Dependency Walker と呼ばれるプログラムがあり、特定のPEファイル(dll、exe、ocx ...)の依存関係を確認できます。

このエラーは本当に煩わしく、デバッグが非常に困難です。あなたはあなたのdllが存在していることを確認する必要があります。また、このdllが持っているすべての依存関係。このキーポイントは通常、頭痛の種となるところです。

2
Eric

ProcessMonitor (Sysinternals Suiteから)を使用すると、例外がスローされる直前にプロセスがどのDLLを探しているか)を確認できます。

0
Liran

依存関係ウォーカーはネイティブPEファイルに必要なすべてのDLLを静的に解決し、不足している依存関係にフラグを立てますが、Fusion Log Viewerは実行時にマネージコードのアセンブリバインディングの問題をキャッチします。ネイティブDLLを動的にロードするマネージ.Netコードの場合、これらのツールでは不十分です。

プロセスモニターを使用して「ファイルまたはアセンブリを読み込めませんでした」問題をデバッグする方法に関するブログ投稿は次のとおりです。 https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems- usi

0
Mike S.