У нас є стара веб-програма ASP.NET MVC 3, побудована у VS2010, яку не вдається скомпілювати з моменту оновлення системи безпеки минулого тижня.
Проблема полягає в тому, що посилання на System.Web.Mvc.dll порушено.
Коли я відкриваю файл рішення на нашій машині збірки, де оновлення системи безпеки не запускалось, і відкриваю діалогове вікно властивостей Посилання-> System.Web.MVC, це виглядає чудово.
Шлях - C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll Версія 3.0.0.0
Але коли я відкриваю файл рішення на машині розробника, де запущено оновлення безпеки, посилання-> System.Web.MVC позначено як відсутні. Якщо я видалю його та спробую додати назад за допомогою діалогового вікна Додати посилання VS2010, воно не відображається.
Блукання по Інтернету привело мене до пропозицій щодо оновлення MVC за допомогою NuGet. Ми не використовували NuGet у наших проектах VS2010, тому це здається не зовсім правильним для цієї ситуації. Я все-таки спробував і в підсумку отримав півдюжини відсутніх посилань.
Коли я переглядаю властивості "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" у Провіднику Windows, на машині збірки я бачу версію 3.0.0.0.
Коли я розглядаю властивості машини розробника, я бачу версію 3.0.50813.1.
Мені потрібен спосіб змінити спосіб створення та запуску, щоб я міг створювати та запускати незалежно від того, яка з цих двох бібліотек DLL встановлена в .NET 3.0.
Ідеї?
Те, що я спробував, не спрацювало
Перша спроба - якщо збірка відсутня, додайте її. Я видалив старе відсутнє посилання. Потім я скопіював DLL із папки "ASP.NET MVC3 \ Assemblies" у папку у своєму проекті. Встановіть його як "Копіювати завжди" та додайте як посилання.
При цьому проект компілювався у VS2010, але коли я намагався попередньо скомпілювати сторінки за допомогою aspnet_compiler, я отримав попередження:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Наразі мені вдалося уникнути розуміння політики виконання, але я спробував додати це у web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Спробував ще раз і отримав ті самі попередження.
Моє запитання - чи все ще є проблема? Або мій вирішить це, незважаючи на попередження?