Решение ASP.NET MVC4 не удается создать после установки KB2993928

У нас есть решение ASP.NET MVC 4 с несколькими ссылками, которые строились без проблем уже около 2 лет. Однако после установки KB2993928 и KB2993937 этим утром мы не можем запустить FxCop на этом решении на наших машинах Windows 7.

У меня такое чувство, потому что это обновление изменило DLL-версию сборки System.Web.Mvc в GAC. Это связано с тем, что в GAC я могу в настоящее время найти 3 разных DLL System.Web.Mvc, которые все обновлены сегодня.

Ошибка, которую мы получаем в сборке, выглядит следующим образом:

6>MSBUILD : error : CA0001 : The following error was encountered while reading module 'FrontEnd.Implementation': Assembly reference cannot be resolved: System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. [C:\Project\FrontEnd\02-Implementation\02-Implementation.csproj]
6>MSBUILD : error : CA0058 : The referenced assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be found. This assembly is required for analysis and was referenced by: S:\Deliverables\FrontEnd\bin\FrontEnd.Implementation.dll. [C:\Project\FrontEnd\02-Implementation\02-Implementation.csproj]

Поскольку мы используем ASP.NET MVC 4, эта версия 3.0 DLL ссылается косвенно на одну из наших ссылок. Например, RazorGenerator ссылается на версию 3.0.0.0. Возможно, и другие. Из того, что я могу сказать, нет новой версии RazorGenerator.

Версии System.Web.Mvc, которые я вижу в GAC: 3.0.50813.1, 4.0.40804.0 и 5.0.20821.0.

Я удалил ссылку на System.Web.Mvc из наших проектов и добавил Mvc как пакет NuGet. Это исправляет нашу компиляцию, но FxCop по-прежнему не работает из-за косвенных ссылок.

Если какая-либо дополнительная информация требуется, пожалуйста, дайте мне знать.

6 ответов

Если эта проблема вызвана ссылками, которые, в свою очередь, имеют зависимости от этих конкретных сборок, вы можете исправить это, принудив FxCop использовать только StrongName и игнорировать номер версии. Это решение описано здесь.

Конечно, реальным решением было бы обновить ссылочные сборки (с косвенными зависимостями) до более новых версий.


Обновления безопасности обновляют версию сборки system.web.mvc.dll. Вам нужно обновить свой csproject, чтобы исправить версию. Проверьте это сообщение: Патч для защиты ASP.NET MVC до версии 3.0.0.1 разбивает сборку


Это было сделано с помощью обновления для системы безопасности 15 октября из Центра обновления Windows. Вам также нужно будет запускать обновления на серверах сборки.

Ссылка на обновление: http://www.microsoft.com/en-ie/download/details.aspx?id=44533

Это обновление также исправляет и другие версии.

Вероятно, вам придется обновлять свои проекты до более новой версии, так как она изменяет номер версии и полностью удаляет старую версию.


Удалите все ссылки на System.Web.MVC, а затем повторно добавьте их, вручную просмотрев DLL (C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_5.1.0. 0__31bf3856ad364e35\System.Web.MVC.dll на нашей машине). Гораздо быстрее, чем повторная установка MVC, если это только что сняло ваш производственный сервер!


Решение:

  • Удалите MVC Framework с помощью "Программы и функции" (в зависимости от того, какую версию вы используете)
  • Переустановите MVC Framework (http://www.asp.net/mvc/mvc4)

Должна исправить проблему - никаких изменений в сборке/решениях не требуется.


Я использовал следующее решение, и он отлично работает:

qaru.site/questions/31478/...

(не забудьте выбрать проект по умолчанию в консоли диспетчера пакетов для каждого проекта с ошибкой сборки)

licensed under cc by-sa 3.0 with attribution.