安装KB2993928后,ASP.NET MVC4解决方案无法构建

时间:2014-10-15 14:42:52

标签: asp.net-mvc msbuild gac fxcop windows-update

我们有一个ASP.NET MVC 4解决方案,其中有几个引用已经建立了大约2年没有问题。但是,在今天早上安装KB2993928KB2993937后,我们无法在Windows 7计算机上运行此解决方案的FxCop。

我有一种感觉这是因为此更新更改了GAC中System.Web.Mvc程序集的DLL版本。这是因为在GAC中我现在可以找到3个不同的System.Web.Mvc DLL,它们今天都已更新。

我们在构建中收到的错误如下:

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。

我在GAC中看到的System.Web.Mvc版本是:3.0.50813.1,4.0.40804.0和5.0.20821.0。

我从我们的项目中删除了对System.Web.Mvc的引用,并将Mvc添加为NuGet包。这修复了我们的编译,但由于间接引用,FxCop仍无效。

如果需要任何其他信息,请告诉我们。

6 个答案:

答案 0 :(得分:1)

解决方案:

  1. 通过"程序和功能"卸载MVC框架。 (无论您使用哪个版本)
  2. 重新安装MVC框架(http://www.asp.net/mvc/mvc4
  3. 应该解决问题 - 不需要对构建/解决方案进行任何更改。

答案 1 :(得分:1)

这是通过10月15日Windows Update的安全更新完成的。您还需要在构建服务器上运行更新。

更新链接: http://www.microsoft.com/en-ie/download/details.aspx?id=44533

此更新也修复了其他版本。

您可能需要将项目更新到较新版本,因为它会更改版本号并完全删除旧版本。

答案 2 :(得分:1)

删除对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快得多,如果刚刚关闭生产服务器的话!

答案 3 :(得分:1)

安全更新会更新system.web.mvc.dll的程序集版本。您需要更新csproject以更正版本。查看这篇文章: ASP.NET MVC security patch to version 3.0.0.1 breaks build

答案 4 :(得分:1)

如果此问题是由引用引起的,而引用又依赖于这些特定程序集,则可以通过强制FxCop仅使用StrongName并忽略版本号来解决此问题。该解决方案描述为here

当然,真正的解决方案是将引用的程序集(带有间接依赖关系)更新到更新的版本。

答案 5 :(得分:0)

我使用了以下解决方案,并且它的工作非常完美:

https://stackoverflow.com/a/26490590

(不要忘记在程序包管理器控制台上为构建失败的每个项目选择默认项目)