Mevcut bir projeyi geliştirmeye başlamak için yepyeni bir makineye kopyaladım ve referans aldığım derlemelerden birinin (bir telerik DLL olduğu gibi) sürümü ile ilgili bir sorunla karşılaştım.
Proje başlangıçta derlemenin eski bir sürümüne başvurdu (buna v1.0.0.0 diyelim). Yeni makinemde montajın en son sürümü yüklü, bu yüzden güncellediğimi düşündüm (yeni sürümü v2.0.0.0 olarak adlandıralım).
Şimdi sorun İşte: Ben eski v1.0.0.0 dll proje klasörüne kopyalayın ve referans olarak ekleyin, web sitesi sorunsuz başlar. Bu başvuruyu silersem (ve ayrıca eski DLL dosyasını sistemimden silersem) ve yeni sürümü (v2.0.0.0) eklerseniz, sayfa aşağıdaki özel durumu gösterir:
Dosya veya derleme 'XXXXXX, Sürüm = 1.0.0.0, Kültür = nötr, PublicKeyToken = 121fae78165ba3d4' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040)
Açıkçası, kod güncel olmayan sürümü arıyor ve bulamıyor. Ama neden?
Bu sürüm numarası için çözüm klasörünü açtım ve tek bir başvuru bulamadım. .Csproj dosyasının metnini iki kez kontrol ettim ve sürümün en son sürümü ve HintPath'in yeni DLL dosyasının yolunu doğru bir şekilde gösterdiğini buldum. Ayrıca, sisteme eski DLL'yi yüklemediğim için GAC'ımda görünmüyor (ancak v2.0.0.0 beklendiği gibi çalışıyor).
Daha sonra füzyon günlüğü görüntüleyicisini neden bu eski sürümü aradığını anlamaya çalışmak için etkinleştirdim, ancak şans yok:
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.
Tüm bunlar, eski meclisi arayarak başladığını söylüyor. Çevrimiçi bir çözüm bulmaya çalıştım ve bu benzer SO sorusunu gördüm , ancak sorunumun tam tersi gibi görünüyor. Bu sorucının programı başvurulan program yerine yanlış DLL buluyordu. Benim sorunum ise programın gizemli bir şekilde yanlış DLL'yi arıyor ve doğru olanı bin klasöründe ve GAC'da yerel olarak bulunabiliyorsa bulamıyor.
Benimki neden eski versiyonu arıyor? Bu kötü referansı bulmak için başka nerede arama yapabilirim?