Решение 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, на эту DLL версии 3.0 косвенно ссылается одна из наших ссылок. Например, 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 по-прежнему не работает из-за косвенных ссылок.

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


person Olaf Keijsers    schedule 15.10.2014    source источник
comment
попробуйте добавить привязку сборки для MVC4 stackoverflow.com/questions/10402005/   -  person Marian Ban    schedule 15.10.2014
comment
Такая же проблема для MVC3.   -  person David Airapetyan    schedule 15.10.2014
comment
MajoB: Я пробовал это, но, думаю, это для времени выполнения. Моя проблема в настоящее время заключается в том, чтобы заставить его даже построить (или запустить FxCop).   -  person Olaf Keijsers    schedule 15.10.2014


Ответы (6)


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

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

person Peter    schedule 17.10.2014

Решение:

  1. Удалите MVC Framework через «Программы и компоненты» (какую бы версию вы ни использовали)
  2. Переустановите MVC Framework (http://www.asp.net/mvc/mvc4)

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

person David Airapetyan    schedule 15.10.2014
comment
Я попробую это. Придется ли нам делать это и на нашем сервере сборки? - person Olaf Keijsers; 15.10.2014
comment
Вероятно. Мы еще не пропатчили наш сервер сборки, но я не вижу, как можно избежать этого шага. - person David Airapetyan; 16.10.2014
comment
Я уже пробовал это, но он устанавливает 4.0.20710.0, и мне нужно вернуться к 4.0.30319.0. Есть какие-нибудь советы по этому поводу? - person Lee Grissom; 16.10.2014
comment
Не думаю, что это одно и то же. Проблема в том, что обновление безопасности для MVC 4.0 было выполнено для обновления библиотеки до версии 4.0.0.1. Если у вас включены автоматические обновления Windows, это было сделано за кулисами. Принуждение к прекращению работы любых проектов, если на них явно ссылается версия в проекте. - person Sean; 16.10.2014
comment
Ли - как вы ссылаетесь на сборку MVC? Мы ссылаемся на него по основной версии, например System.Web.Mvc, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL (для MVC3). Когда это сделано таким образом, вышеупомянутый обходной путь работает. Я предполагаю, что если вы специально нацеливаетесь на 4.0.30319.0, тогда патч сломает вас, и переустановка не поможет. - person David Airapetyan; 16.10.2014
comment
Фу ... похоже, 16 октября было другое обновление (2993937 КБ), которое снова сломало его. - person David Airapetyan; 16.10.2014
comment
@ Давид Айрапетян, ты прав. Теперь я могу скомпилировать, я просто хотел быть на той же версии, что и остальная часть моей команды. Ничего страшного. - person Lee Grissom; 16.10.2014
comment
Боюсь, что мое решение некорректно - повторная установка MVC по существу откатывает обновление. Однако изменение ссылки на решение может быть опасным из-за развертывания - наш код работает в Azure, и в зависимости от того, когда Microsoft исправляет нашу среду, мы можем или не можем сломать его. - person David Airapetyan; 16.10.2014
comment
Вот почему я думаю, что вам, вероятно, следует просто включить System.Web.Mvc.dll в свое развертывание. Мы перешли к этому, и теперь мы можем снова скомпилировать и запустить решение. Однако проблема с FxCop остается из-за косвенных ссылок на версии X.0.0.0. - person Olaf Keijsers; 17.10.2014

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

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

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

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

person Sean    schedule 15.10.2014
comment
Это не решит нашу проблему с косвенными ссылками на старые библиотеки DLL. - person Olaf Keijsers; 17.10.2014

Удалите все ссылки на 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, если ваш производственный сервер только что отключился!

person Gumbo    schedule 16.10.2014
comment
Мы сделали это (за исключением того, что я добавил пакет NuGet для MVC, поскольку я считаю, что это лучшее решение), но проблема остается в том, что у нас есть косвенные ссылки на старую версию. Мы не можем исправить это таким образом. - person Olaf Keijsers; 17.10.2014
comment
Мы использовали это, чтобы отменить обновление. (wuse \ uninstall не работает). Спасибо - person Julian; 17.10.2014

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

person mattfei    schedule 16.10.2014
comment
Это не решит нашу проблему с косвенными ссылками на старые библиотеки DLL. - person Olaf Keijsers; 17.10.2014

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

https://stackoverflow.com/a/26490590

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

person Ephy L    schedule 21.10.2014
comment
Опять же, поскольку наша проблема связана с косвенными ссылками, в данном случае это не решает проблему. - person Olaf Keijsers; 22.10.2014