安装 KB2993928 后无法构建 ASP.NET MVC4 解决方案
Posted
技术标签:
【中文标题】安装 KB2993928 后无法构建 ASP.NET MVC4 解决方案【英文标题】:ASP.NET MVC4 solution fails to build after installing KB2993928 【发布时间】:2014-12-10 16:44:42 【问题描述】:我们有一个 ASP.NET MVC 4 解决方案,其中包含几个参考资料,该解决方案已经构建了大约 2 年,没有出现任何问题。然而,在今天早上安装了KB2993928 和KB2993937 之后,我们无法再在我们的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 仍然无法工作。
如果需要任何其他信息,请告诉我。
【问题讨论】:
尝试为MVC4添加程序集绑定***.com/questions/10402005/… MVC3 的同样问题。 MajoB:我试过了,但我认为它是用于运行时的。我目前的问题是让它甚至构建(或运行 FxCop)。 【参考方案1】:如果此问题是由依赖于这些特定程序集的引用引起的,您可以通过强制 FxCop 仅使用 StrongName 并忽略版本号来解决此问题。此解决方案描述为here。
当然,真正的解决方案是将引用的程序集(具有间接依赖关系)更新到较新的版本。
【讨论】:
【参考方案2】:解决方案:
-
通过“程序和功能”(无论您使用哪个版本)卸载 MVC 框架
重新安装 MVC 框架 (http://www.asp.net/mvc/mvc4)
应该解决问题 - 不需要更改构建/解决方案。
【讨论】:
我会试试这个。我们是否也必须在构建服务器上执行此操作? 可能。我们尚未修补我们的构建服务器,但我看不出如何避免这一步。 我已经尝试过了,但是它安装了 4.0.20710.0,我需要回到 4.0.30319.0。对此有何建议? 我认为这不是一回事。问题是已完成 MVC 4.0 的安全更新以将库更新到 4.0.0.1。如果您启用了静默 Windows 更新,则这是在您的幕后完成的。如果项目中的版本明确引用了任何项目,则强制它们停止工作。 Ew... 10 月 16 日的 另一个 更新 (KB 2993937) 再次为我们打破了它。【参考方案3】:这是通过 10 月 15 日来自 Windows 更新的安全更新完成的。您还需要在构建服务器上运行更新。
更新链接: http://www.microsoft.com/en-ie/download/details.aspx?id=44533
此更新还修复了其他版本。
您可能必须将您的项目更新到较新的版本,因为它会更改版本号并完全删除旧版本。
【讨论】:
这不会解决我们间接引用旧 DLL 的问题。【参考方案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 快得多!
【讨论】:
我们这样做了(除了我为 MVC 添加了 NuGet 包,因为我认为这是更好的解决方案),但问题仍然是我们间接引用了旧版本。我们无法以这种方式解决这些问题。 我们用它来“恢复”更新。 (wuse \uninstall 不起作用)。谢谢【参考方案5】:安全更新更新了 system.web.mvc.dll 的程序集版本。您需要更新您的 csproject 以更正版本。检查这篇文章: ASP.NET MVC security patch to version 3.0.0.1 breaks build
【讨论】:
这不会解决我们间接引用旧 DLL 的问题。【参考方案6】:我使用了以下解决方案,效果很好:
https://***.com/a/26490590
(不要忘记在包管理器控制台上为每个构建失败的项目选择默认项目)
【讨论】:
再一次,因为我们的问题是间接引用,所以在这种情况下这并不能解决问题。以上是关于安装 KB2993928 后无法构建 ASP.NET MVC4 解决方案的主要内容,如果未能解决你的问题,请参考以下文章
64位win8.1系统无法安装更新 kbKB2919355,求解决
更新KB 2687323后,VB6 IDE无法加载MSCOMCTL.OCX
命令行应用程序中的 asp.net 4.0 到 excel 2010 不起作用 - 即使在驱动程序安装后也找不到驱动程序
构建 ASP.NET Web Api 时是不是必须使用 HTTP 协议和 HttpResponseMessage 类?