.Net が間違った参照アセンブリバージョンを選択する 質問する

.Net が間違った参照アセンブリバージョンを選択する 質問する

既存のプロジェクトを新しいマシンにコピーして開発を開始したところ、参照アセンブリの 1 つ (偶然にも Telerik DLL) のバージョンに問題が発生しました。

プロジェクトは元々、アセンブリの古いバージョン (v1.0.0.0 と呼ぶことにします) を参照していました。新しいマシンにはアセンブリの最新バージョンがインストールされているので、更新したと思いました (新しいバージョンを v2.0.0.0 と呼ぶことにします)。

ここで問題があります。古い v1.0.0.0 dll をプロジェクト フォルダーにコピーして参照として追加すると、Web サイトは問題なく起動します。その参照を削除し (システムから古い DLL も削除し)、新しいバージョン (v2.0.0.0) を追加すると、ページに次の例外が表示されます。

ファイルまたはアセンブリ 'XXXXXX、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = 121fae78165ba3d4' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

明らかに、コードは古いバージョンを探していますが、見つけることができません。しかし、なぜでしょうか?

ソリューション フォルダーでそのバージョン番号を検索しましたが、参照は 1 つも見つかりませんでした。.csproj ファイルのテキストを再確認したところ、バージョンには最新バージョンが正しく表示され、HintPath には新しい DLL へのパスが正しく表示されています。さらに、古い DLL をシステムにインストールしていないため、GAC には表示されません (ただし、v2.0.0.0 は予想どおり表示されます)。

次に、Fusion ログ ビューアーを有効にして、なぜ古いバージョンを探しているのかを調べてみましたが、見つかりません。

Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.


=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
 (Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

そこには、古いアセンブリを探すことから始まるとだけ書かれています。私はオンラインで解決策を見つけようとしましたが、これに似たものを見つけました質問ですですが、私の問題とはまったく逆のようです。質問者のプログラムは、参照されている DLL ではなく、間違った DLL を見つけていました。一方、私の問題は、正しい DLL がローカルの bin フォルダーと GAC にあるのに、プログラムが不思議なことに間違った DLL を探して見つけられないことです。

なぜ古いバージョンを探しているのですか? この不適切な参照を見つけるために他にどこで検索できますか?

ベストアンサー1

使用している別のアセンブリが古い dll を参照しているのではないかと思います。使用されている他のすべてのプロジェクト参照について理解していますか? また、それらのいずれかに Telerik dll への参照がありますか?

このように web.config ファイルにバインディング リダイレクトを追加できますか?

<dependentAssembly>
 <assemblyIdentity name="Telerik" publicKeyToken="121fae78165ba3d4"/>
 <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>

おすすめ記事