Оновлення 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.