Обновление окна сломало приложение MVC
Я запустил Центр обновления Windows вчера, и у меня возникли некоторые проблемы, когда я пытаюсь выпустить новую версию своего проекта ASP.NET MVC 4.
Приложение компилируется и работает нормально локально, однако, когда я помещаю версию на тестовый сайт на моем веб-сервере, оно падает с сообщением об ошибке:
System.Web.HttpCompileException: (0): error CS1705: Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
После некоторых исследований я обнаружил, что это связано с обновлением с 4.0.0.0 до 4.0.0.1. Я удалил dll System.Web.Mvc из моего проекта и прочитал dll, который имеет более позднюю версию. Опять же все работает локально, но не в Интернете. Затем я просмотрел web.config и изменил любое упоминание о 4.0.0.0 на 4.0.0.1. Точно так же это продолжает работать внутренне, но терпит неудачу внешне. Сообщение об ошибке:
Не удалось загрузить файл или сборку 'System.Web.Mvc, версия =3.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде. Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку 'System.Web.Mvc, версия =3.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Ошибка источника: Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местоположении исключения может быть идентифицирована с помощью трассировки стека исключений ниже. Отслеживание загрузки сборки: следующая информация может быть полезна для определения, почему не удалось загрузить сборку "System.Web.Mvc, версия =3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35". WRN: регистрация привязки сборки выключена. Чтобы включить ведение журнала ошибок привязки сборки, задайте для параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) значение 1. Примечание. Существует некоторое снижение производительности, связанное с регистрацией ошибок привязки сборки. Чтобы отключить эту функцию, удалите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog].
Я считаю, что это как-то связано с Элмой, которую я использую для обработки ошибок.
Я попытался переустановить из Nuget, как предложено здесь: обновление Windows привело к тому, что MVC3 и MVC4 перестали работать, но это не сработало, и я получаю ту же ошибку.
Добавленная информация: Сервер еще не обновлен, я обеспокоен тем, что обновление может сломать существующую живую версию.
3 ответа
Сообщение об ошибке говорит мне, что вы указали неправильный номер версии для сборки MVC в одном из ваших файлов конфигурации. Найдите файл конфигурации с неверной версией и измените его так, чтобы он соответствовал любой версии, которую вы используете (вы упомянули выше 4.0.0.1). Вы должны проверить все файлы конфигурации, включая
- Тот, что в корне проекта
- Тот, что в папке Views
Вы также можете выполнить перенаправление сборки в вашем конфигурационном файле, чтобы позаботиться об этом. Если сбой произошел из-за сторонней библиотеки, это может быть наиболее подходящим действием.
На основе вашего идентификатора обратной связи предложите использовать перенаправление привязки. Добавьте это к вашему главному web.config..
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
У меня была похожая проблема, когда обновление MS изменило MVC.dll с 3.0.0.0 до 3.0.0.1. Мне нужно поддерживать различные версии моего программного обеспечения, поэтому для обеспечения совместимости мне пришлось скопировать dll 3.0.0.0 в свой проект и ссылаться на него перед сборкой проекта.
Покопавшись еще немного, я обнаружил, что файл web.config внутри папки представления указывает на другую версию System.web.mvc . Однажды я изменился на
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
от
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
изменить версию System.Web.MVC на 4.0.0.0 с 4.0.0.1 Я смог решить эту проблему.