Saya baru saja menyalin proyek yang ada ke mesin baru untuk mulai mengembangkannya dan mengalami masalah dengan versi salah satu rakitan yang saya referensikan (DLL telerik saat itu terjadi).
Proyek awalnya mereferensikan versi perakitan yang lebih lama (sebut saja v1.0.0.0). Mesin baru saya memiliki versi perakitan terbaru yang diinstal, jadi saya pikir saya akan memperbaruinya (sebut saja versi baru v2.0.0.0).
Sekarang inilah masalahnya: Jika saya menyalin dll v1.0.0.0 lama ke folder proyek dan menambahkannya sebagai referensi, situs web diluncurkan tanpa masalah. Jika saya menghapus referensi itu (dan juga menghapus DLL lama dari sistem saya) dan menambahkan versi baru (v2.0.0.0), halaman menunjukkan pengecualian berikut:
Tidak dapat memuat file atau rakitan 'XXXXXX, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = 121fae78165ba3d4' atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)
Jelas, kodenya mencari versi yang ketinggalan zaman dan tidak dapat menemukannya. Tapi kenapa?
Saya menerima folder solusi untuk nomor versi itu dan tidak dapat menemukan satu referensi pun. Saya memeriksa teks dari file .csproj dan menemukan versi yang benar menunjukkan versi terbaru dan HintPath dengan benar menunjukkan jalan ke DLL baru. Selain itu, karena saya tidak menginstal DLL lama pada sistem, itu tidak muncul di GAC saya (meskipun v2.0.0.0 tidak, seperti yang diharapkan).
Saya kemudian mengaktifkan fusion log viewer untuk mencoba mencari tahu mengapa ia mencari versi lama itu, tetapi tidak berhasil:
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.
Semua itu mengatakan bahwa itu dimulai dengan mencari majelis lama itu. Saya telah mencoba untuk menemukan solusi online dan melihat pertanyaan SO yang serupa ini , tetapi tampaknya kebalikan dari masalah saya. Program kuesioner itu menemukan DLL yang salah, bukan yang direferensikan. Sedangkan masalah saya adalah bahwa program ini secara misterius mencari DLL yang salah dan tidak dapat menemukannya ketika yang tepat dapat ditemukan secara lokal di folder bin dan di GAC.
Mengapa saya mencari versi lama? Di mana lagi saya dapat mencari untuk menemukan referensi yang buruk ini?