既存のプロジェクトを新しいマシンにコピーして開発を開始したところ、参照されているアセンブリの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 Log Viewerを有効にして、古いバージョンを探している理由を理解しようとしましたが、運がありませんでした。
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.
それはすべて、古いアセンブリを探すことから始まると言っています。私はオンラインで解決策を見つけようとし、この同様のSOの質問を見ましたが、それは私の問題の正反対のようです。その質問者のプログラムは、参照されたDLLではなく、間違ったDLLを見つけていました。私の問題は、プログラムが不思議なことに間違ったDLLを探しており、適切なDLLがローカルにbinフォルダーとGACにある場合、それを見つけることができないことです。
なぜ旧バージョンを探しているのですか?この悪い参照を見つけるために他にどこを検索できますか?