Решение 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 по-прежнему не работает из-за косвенных ссылок.
Если какая-либо дополнительная информация требуется, пожалуйста, дайте мне знать.
Ответы
Ответ 1
Если эта проблема вызвана ссылками, которые, в свою очередь, имеют зависимости от этих конкретных сборок, вы можете исправить это, принудив FxCop использовать только StrongName и игнорировать номер версии. Это решение описано здесь.
Конечно, реальным решением было бы обновить ссылочные сборки (с косвенными зависимостями) до более новых версий.
Ответ 2
Решение:
- Удалите MVC Framework с помощью "Программы и функции" (в зависимости от того, какую версию вы используете)
- Переустановите MVC Framework (http://www.asp.net/mvc/mvc4)
Должна исправить проблему - никаких изменений в сборке/решениях не требуется.
Ответ 3
Это было сделано с помощью обновления для системы безопасности 15 октября из Центра обновления Windows. Вам также нужно будет запускать обновления на серверах сборки.
Ссылка на обновление:
http://www.microsoft.com/en-ie/download/details.aspx?id=44533
Это обновление также исправляет и другие версии.
Вероятно, вам придется обновлять свои проекты до более новой версии, так как она изменяет номер версии и полностью удаляет старую версию.
Ответ 4
Удалите все ссылки на 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, если это только что сняло ваш производственный сервер!
Ответ 5
Обновления безопасности обновляют версию сборки system.web.mvc.dll. Вам нужно обновить свой csproject, чтобы исправить версию. Проверьте это сообщение:
Патч для защиты ASP.NET MVC до версии 3.0.0.1 разбивает сборку
Ответ 6
Я использовал следующее решение, и он отлично работает:
fooobar.com/info/31478/...
(не забудьте выбрать проект по умолчанию в консоли диспетчера пакетов для каждого проекта с ошибкой сборки)