Fusion ローダーが警告や確認なしで DLL を単純にスキップする原因を知っている人はいますか?
コマンドライン アプリケーションから (C# で) これを実行しようとすると、
Assembly.LoadFrom("c:\\Deploy\\bin\\WebServices.dll")
私はこれを見る:
「要求されたタイプの 1 つ以上をロードできません。詳細については、LoaderExceptions プロパティを取得してください。」
その DLL には Platform.DLL への依存関係がありますが、その依存関係の読み込みが失敗するため、このコード行は例外をスローします。Fusion アセンブリの読み込みメッセージを確認すると、次のように表示されます。
=== プレバインド状態情報 === ログ: DisplayName = Platform、Version=9.0.0.0、Culture=neutral、PublicKeyToken=null (完全指定) ... ログ: このバインドは LoadFrom ロード コンテキストで開始されます。 WRN: ネイティブ イメージは LoadFrom コンテキストではプローブされません。ネイティブ イメージは、Assembly.Load() のように、既定の読み込みコンテキストでのみプローブされます。 ログ: アプリケーション構成ファイルが見つかりません。 ログ: C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config のマシン構成ファイルを使用しています。 ログ: 現時点ではポリシーが参照に適用されていません (プライベート、カスタム、部分、または場所に基づくアセンブリ バインド)。 ログ: 新しい URL ファイルのダウンロードを試みています:///C:/Project/bin/Debug/Platform.DLL。 ログ: 新しい URL ファイルのダウンロードを試みています:///C:/Project/bin/Debug/Platform/Platform.DLL。 ログ: 新しい URL ファイル:///C:/Project/bin/Debug/Platform.EXE のダウンロードを試みています。 ログ: 新しい URL ファイル:///C:/Project/bin/Debug/Platform/Platform.EXE のダウンロードを試みています。 ログ: 新しい URL ファイル:///c:/Deploy/bin/Platform.DLL のダウンロードを試みています。 ログ: 新しい URL ファイル:///c:/Deploy/bin/Platform/Platform.DLL のダウンロードを試みています。 ログ: 新しい URL ファイル:///c:/Deploy/bin/Platform.EXE のダウンロードを試みています。 ログ: 新しい URL ファイル:///c:/Deploy/bin/Platform/Platform.EXE のダウンロードを試みています。
問題は、DLLが に存在しc:\Deploy\bin\Platform.DLL
、適切なバージョンがあり、署名された公開鍵がないことです。
私が考えた
こと: 1. たぶん、本当に Platform.DLL の依存関係が壊れていて、この動作を引き起こしているのでしょうか? (Reflector で依存関係ツリーを追跡しましたが、欠落している DLL は見つかりませんでした)
2. リリース/デバッグの不一致、または 64 ビットと 32 ビットの違いがあるのでしょうか? しかし、すべてが同じマシン上に構築されました
。このログに「成功」メッセージも「失敗」メッセージも表示されません。例外のために失敗したことはわかっています。
PS 技術詳細:
マシン環境は Windows 2008 64 ビットで、.NET 2.0、3.0、および 3.5 がインストールされています。
この同じアプリケーションは別のマシン (Vista 32 ビット) で問題なく動作し、同じディレクトリ構造と DLL を使用しますが、それらはそのマシンでビルドされています。