ですから、これに似た質問がたくさんあったことは承知していますが、この 1 日で多くの回答を調べましたが、何も役に立ちませんでした。
一連の外部 DLL を参照する WPF アプリケーションを開発しています。特に、DefinitionInterpreter と呼ばれる DLL が 1 つありますが、これは問題を引き起こすことが証明されています。私が参照するすべてのプロジェクトで、それは頑固で、機能しないことを選択します。単体テスト スイートで動作させることができましたが、WPF アプリケーションで動作させることはできません。
GAC を試し、プロジェクトをクリーニングし、プロジェクトを追加して削除し、再起動し、バージョンを確認し、依存関係を確認しましたが、何も機能しません。
同じ例外が発生し続けます:
ファイルまたはアセンブリ 'DefinitionInterpreter、Version=3.6.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)
ildasm.exe で DLL を開こうとしましたが、異常はありませんでした。唯一の依存関係は、System.Xml、System.Core、および mscorlib です。
マニフェストを確認すると、バージョンが 3.6.0.0 であることが確認されます
本当に気になるのは、私のプロジェクトの 1 つで動作することですが、同じ DLL (同じパスとすべて) を参照しているにもかかわらず、別のプロジェクトで動作させることができないということです。
助言がありますか?私は .NET 4.0 を使用しており (4.0 であることがプロジェクトの要件です)、x86 と x64 の両方を試しました。
編集:
Fusion Log の詳細を表示すると、次のような出力が得られます。
*** Assembly Binder Log Entry (7/18/2013 @ 7:07:42 PM) ***
The operation failed.
Bind result: hr = 0x80131040. No description available.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable E:\Src\Hermes\Tool\bin\Debug\HermesClient.vshost.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = DefinitionInterpreter, Version=3.6.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///E:/Src/Hermes/Tool/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = HermesClient.vshost.exe
Calling assembly : SomeAssembly, Version=13.5.13.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\Src\Hermes\Tool\bin\Debug\HermesClient.vshost.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\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:///E:/Src/Hermes/Tool/bin/Debug/DefinitionInterpreter.DLL.
LOG: Assembly download was successful. Attempting setup of file: E:\Src\Hermes\Tool\bin\Debug\DefinitionInterpreter.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: DefinitionInterpreter, Version=3.6.0.0, Culture=neutral, PublicKeyToken=75a99a2a5bcd4c96
WRN: Comparing the assembly name resulted in the mismatch: PUBLIC KEY TOKEN
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
私の CSProj での参照は次のとおりです。
<Reference Include="DefinitionInterpreter, Version=3.6.0.0, Culture=neutral, PublicKeyToken=75a99a2a5bcd4c96, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\DefinitionInterpreter.dll</HintPath>
<Private>True</Private>
</Reference>
コマンドを実行すると、 sn -T DefinitionInterpreter.dll
75a99a2a5bcd4c96 が返されます。正直なところ、実行時に公開鍵トークンがnullであるとどのように考えているのか、そしてなぜ不一致があるのか 途方に暮れています。