Обновление окна сломало приложение 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 Я смог решить эту проблему.

Другие вопросы по тегам