Оновлення Windows спричинило припинення роботи MVC3 та MVC4


126

Я єдиний, хто встановив оновлення Windows (8.1) 15 жовтня, і раптом MVC перестає працювати через це попередження?

Попередження 1 Не вдалося вирішити цю посилання. Не вдалося знайти збірку "System.Web.Mvc, версія = 4.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35, ProcessArchitecture = MSIL". Переконайтесь, що збірка існує на диску. Якщо цей код вимагає ваш код, ви можете отримати помилки компіляції.

Здається, що це оновлення Windows встановлює новішу версію MVC з номером версії 4.0.0.1 і видаляє стару версію з папки програмних файлів.

Хтось знає, як це виправити без сканування для кожного проекту?


Звідки посилання? GAC? Довідкові збірки або нугети?
blowdart

1
Про це читайте блог Microsoft . (Завдяки e4rthdog за посилання на це, просто коментуючи, щоб отримати більше видимості)
Hanna



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 за посилання на це, просто прокоментувавши для отримання більшої видимості)
Hanna

10
Будь-яка ідея, чому, виконуючи вищезазначене, я отримую цілу купу цих попереджень: "ASPNETCOMPILER: попередження CS1702: припускаючи посилання на збірку 'System.Web.Mvc, версія = 4.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' збіги" System.Web.Mvc, версія = 4.0.0.1, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35 ', можливо, вам потрібно буде подати політику виконання "?
Фарінья

1
@Farinha, у мене такі ж попередження. Я не можу їх відібрати. Ці попередження вбивають ефективність збірки. Ви знайшли спосіб це виправити?
StefanHa

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

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 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 PROJECTNAME

    Версія 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 на справжні.

А в 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
Danny Tuppeny

1

Добре,

Для мене це було два простих кроки:

Спочатку я змінив усі посилання на System.Web.Mvc з 4.0.0.0 на 4.0.0.1,

Тоді мені довелося перейти до властивостей System.Web.Mvc (можливо, тому, що я його видалив і повторно додав) і змінити локальну копію на справжню.

Сподіваюся, це комусь корисно.


0

Якщо ви все ще отримуєте ту саму помилку після спроби рішення @Krzysztof або будь-якого з інших відповідей, описаних вище, одна з проблем, яка може допомогти вам, - це видалення MVC Runtime 4.0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.