今天早上,据报道,我们的QA服务器上的web应用程序已完全损坏,网络报告了以下错误.配置:
无法加载文件或程序集"System.Web.Mvc,版本=5.1.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35"或其依赖项之一.系统找不到指定的文件
记得看到一个提到MVC的Windows更新,我做了一些挖掘,发现lots of people reporting最近的一个Windows更新 destruct 了MVC.
在对这些问题和我们的服务器进行了大量挖掘之后,似乎咬我们的东西与其他问题中的东西不匹配,但看起来确实相关.以下是我们想知道的:
- 我们损坏的应用程序使用的是ASP.NET MVC 5.1
- MVC是通过NuGet安装的
- 我们的BuildServer和QA服务器没有安装MVC 5.1(因此,不是GAC'd)
我们认为的 destruct 导致了"坏建筑"的产生:
- 已通过Windows Update despite not having MVC 5.1 installed in the GAC在BuildServer上安装了MVC 5.1的修补程序
- 该补丁已将MVC 5.1的"更新"版本放入GAC
- 当DLL位于GAC中时,忽略CopyLocal=true;因此,自补丁发布以来,这意味着我们的应用程序将从BuildServer no longer have System.Web.MVC in the output folder中构建
- 因为System.Web.MVC不在我们的QA服务器上的GAC中(它们还没有打补丁),所以应用程序现在失败,因为找不到System.Web.MVC
假设上述行为是正确的,这意味着任何时候MS service通过Windows Update that we do not have in the GAC创建NuGet DLL时,我们的BuildServer都将开始生成不完整的构建(丢失已注入GAC的DLL).
升级到MVC 5.2解决了这个问题(可能是因为它没有打补丁,因此没有注入GAC);DLL现在被复制到输出文件夹.在升级到5.2.2的diff中,除了版本号更改之外没有任何更改(特别是没有添加/编辑<Private>
个 node ).
我们不希望开始把所有东西都打开,也不希望创建手动构建步骤,将所有DLL复制到bin
文件夹中,以防MS修补它们.
那么,如果将来MS修补其他DLL,我们可以通过更改today来确保我们不会以Out BuildServer默默地生成不好的构建而告终呢?