Обновление Windows привело к тому, что MVC3 и MVC4 перестали работать


126

Я единственный, кто установил Центр обновления Windows (8.1) 15 октября, и вдруг MVC перестает работать из-за этого предупреждения?

Предупреждение 1 Не удалось разрешить эту ссылку. Не удалось найти сборку «System.Web.Mvc, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL». Убедитесь, что сборка существует на диске. Если эта ссылка требуется для вашего кода, вы можете получить ошибки компиляции.

Похоже, что это обновление Windows устанавливает более новую версию MVC с номером версии 4.0.0.1 и удаляет старую версию из папки программных файлов.

Кто-нибудь знает, как это исправить без обхода по каждому проекту?


Откуда ссылка? GAC? Эталонные сборки или нугет?
blowdart

1
Прочтите блог Microsoft по этому поводу. (Спасибо e4rthdog за ссылку на это, просто комментирую для большей наглядности)
Ханна



1
Имейте в виду, что вам также придется редактировать web.config в производственных средах.
Капитан Кенпачи,

Ответы:


107

Лучшее решение - обновить DLL до версии 4.0.0.1. Попробуйте использовать nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Это автоматически обновится

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Вам просто нужно отредактировать версию System.Web.Mvc вручную в:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


1
Да, просто замените ссылку GAC ссылкой NuGet. Работали у нас.
Абатищев

7
Прочтите блог Microsoft по этому поводу. (Спасибо e4rthdog за ссылку на это, просто комментирую для большей наглядности)
Ханна

10
Любая идея, почему после выполнения вышеуказанного я получаю целую кучу этих предупреждений: «ASPNETCOMPILER: предупреждение CS1702: Предполагается ссылка на сборку» System.Web.Mvc, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 'соответствует' System.Web.Mvc, Version = 4.0.0.1, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 ', вам может потребоваться предоставить политику времени выполнения "?
Фаринья

1
@Farinha, у меня такие же предупреждения. Я не могу их увести. Эти предупреждения снижают производительность сборки. Вы нашли способ исправить это?
StefanHa

3
Нет @StefanHa, пока не нашел исправления. Я заметил, что во всем приложении есть множество ссылок на 4.0.0.0 в файлах Web.config внутри папок Views, но даже после ручного изменения всех из них предупреждение остается.
Farinha

26

Нам пришлось вручную коснуться каждого .csproj, чтобы обновить версию с 4.0.0.0 до 4.0.0.1, чтобы наши сборки заработали . Довольно больно.

Новые ссылки должны выглядеть так:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
Обратите внимание, что такое же изменение необходимо для MVC 3.0, ссылка должна быть «3.0.0.1», чтобы это снова заработало.
Энди

В моем случае это было необходимо, а также необходимо, чтобы указать, что «Конкретная версия» - «Истина»
pimbrouwers

24

Была такая же проблема после обновления:

Обновление безопасности для Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Но только для проекта со ссылкой на System.Web.Mvc, не установленного пакетом.

Мой коллега, который не установил Microsoft ASP.NET MVC 4.0 Runtime и не получил обновление, не имел проблем и все еще имел ссылку на 4.0.0.0, а не на 4.0.0.1

Я вручную изменил ссылку на 4.0.0 , 1 , после регистрации мой коллега все еще мог строить со ссылкой на 4.0.0. 0 .
(Работает как на Win7 Pro SP1, так и на VS2013 Pro Update 3)


22

См. Этот блог. Рекомендуемый способ - обновить соответствующий пакет NuGet:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Цитировать:

Проблему можно решить, реализовав одно из следующих решений:

  1. (Предпочтительно) Установите Microsoft.AspNet.Mvc из галереи NuGet (это установит перенаправление привязки в ваш web.config). Вы можете сделать это из диспетчера пакетов NuGet или консоли NuGet внутри Visual Studio:

    Установочный пакет Microsoft.AspNet.Mvc -Version -Project ИМЯ ПРОЕКТА

    Версия MVC 4: 4.0.40804.0

    Версия MVC 3: 3.0.50813.1

  2. Вручную обновите ссылку на System.Web.MVC.dll (не используйте ссылку в GAC).

    Попробуйте диалоговое окно Добавить ссылку -> Сборки -> Расширения.



4

Для веб-проекта вам, возможно, также придется обновить конфигурацию в web.config:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>

2

Вам необходимо изменить все ссылки на System.Web.Mvc в вашем решении. Просто удалите их и добавьте новую версию 4.0.0.1.

Также в свойствах измените copy localна true.

И в web.config добавьте предполагаемую привязку, указывающую на новую версию mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Настройка CopyLocal=trueнам не помогла; см .: System.Web.MVCне копируется в binпапку с MS14-059
Дэнни Таппени

1

Ладно,

Для меня это было два простых шага:

Сначала я изменил все ссылки на System.Web.Mvc с 4.0.0.0 на 4.0.0.1,

Затем мне пришлось перейти к свойствам System.Web.Mvc (возможно, потому, что я удалил и повторно добавил его) и изменить copy local на true.

Надеюсь, это кому-то поможет.


0

Если вы по-прежнему получаете ту же ошибку после попытки решения @Krzysztof или любого из других ответов выше, одна работа, которая может сработать для вас, - это удалить MVC Runtime 4.0

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.