Я просто скопіював існуючий проект на абсолютно нову машину, щоб почати розробку на ньому, і у мене виникли проблеми з версією однієї з моїх посилань на збори (телерик DLL як це відбувається).
Проект спочатку посилався на старішу версію збірки (давайте називати її v1.0.0.0). На моїй новій машині встановлена остання версія збірки, тому я подумав, що я її оновив (давайте називати нову версію v2.0.0.0).
Тепер ось проблема: Якщо я скопіюю старий d1 v1.0.0.0 в папку проекту і додаю його як довідник, веб-сайт запускається без проблем. Якщо я видаляю це посилання (а також видаляю стару DLL зі своєї системи) та додаю нову версію (v2.0.0.0), на сторінці відображається такий виняток:
Не вдалося завантажити файл або збірку "XXXXXX, Версія = 1.0.0.0, Культура = нейтральна, PublicKeyToken = 121fae78165ba3d4" або одна з її залежностей. Маніфестне визначення розташованої збірки не відповідає посиланням на збірку. (Виняток з HRESULT: 0x80131040)
Зрозуміло, що код шукає застарілу версію і не може її знайти. Але чому?
Я переглянув папку рішення за цим номером версії і не зміг знайти жодної посилання. Я двічі перевірив текст файлу .csproj і виявив, що версія правильно показує останню версію, а HintPath правильно показує шлях до нової DLL. Крім того, оскільки я не встановив стару DLL в системі, вона не відображається в моєму GAC (хоча v2.0.0.0 робить, як очікувалося).
Потім я включив переглядач журналу синтезу, щоб спробувати з'ясувати, чому він шукає цю стару версію, але не пощастило:
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 і не може її знайти, коли потрібну можна знайти локально в папці bin та в GAC.
Чому мій шукає стару версію? Де ще я можу шукати, щоб знайти цю погану довідку?