今天早上有报道说我们QA服务器上的Web应用程序完全崩溃了,从Web.config中报告了以下错误:
“无法加载文件或程序集'System.Web.Mvc,Version=5.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'或其某个依赖项。系统找不到指定的文件。”
记得看到一个Windows更新提到MVC,我进行了一些挖掘,并发现有很多人报告最近的Windows更新破坏了MVC。
经过对这些问题和我们的服务器的深入挖掘,似乎咬我们的东西与其他问题中的不符,但它似乎与之相关。以下是我们认为我们所知道的:
我们的应用程序使用ASP.NET MVC 5.1,该应用程序已损坏。
MVC是通过NuGet安装的。
我们的BuildServer和QA服务器没有安装MVC 5.1(因此未GAC'd)。
我们相信已经破坏了导致创建“坏构建”的原因:
通过Windows Update在BuildServer上安装了MVC 5.1的补丁,尽管在GAC中没有安装MVC 5.1。
该补丁已将MVC 5.1的“更新”版本放入GAC中。
当DLL位于GAC中时,CopyLocal=true被忽略;因此,自从打补丁以来,这意味着来自BuildServer的应用程序构建不再具有输出文件夹中的System.Web.MVC。 由于我们的QA服务器上没有在GAC中安装System.Web.MVC(它们尚未被修补),因此应用程序现在失败,因为找不到System.Web.MVC。
假设上述行为是正确的,这意味着任何时候当微软通过Windows Update服务提供NuGet DLL(我们没有在GAC中的),我们的BuildServer将开始生成不完整的构建(缺少那些已被注入到GAC中的DLL)。升级到MVC 5.2解决了这个问题(可能是因为它没有被修补程序所覆盖,因此没有被注入到GAC中);该DLL现在被复制到输出文件夹。升级到5.2.2的差异中没有任何更改,除了版本号的变化(特别是没有添加/编辑节点)。我们不希望开始GAC所有东西,也不希望创建手动构建步骤来复制我们所有的DLL到bin文件夹中,以防万一微软修补它们。那么,今天我们可以改变什么来确保我们永远不会在未来出现BuildServer默默地生成错误的构建?
“无法加载文件或程序集'System.Web.Mvc,Version=5.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'或其某个依赖项。系统找不到指定的文件。”
记得看到一个Windows更新提到MVC,我进行了一些挖掘,并发现有很多人报告最近的Windows更新破坏了MVC。
经过对这些问题和我们的服务器的深入挖掘,似乎咬我们的东西与其他问题中的不符,但它似乎与之相关。以下是我们认为我们所知道的:
我们的应用程序使用ASP.NET MVC 5.1,该应用程序已损坏。
MVC是通过NuGet安装的。
我们的BuildServer和QA服务器没有安装MVC 5.1(因此未GAC'd)。
我们相信已经破坏了导致创建“坏构建”的原因:
通过Windows Update在BuildServer上安装了MVC 5.1的补丁,尽管在GAC中没有安装MVC 5.1。
该补丁已将MVC 5.1的“更新”版本放入GAC中。
当DLL位于GAC中时,CopyLocal=true被忽略;因此,自从打补丁以来,这意味着来自BuildServer的应用程序构建不再具有输出文件夹中的System.Web.MVC。 由于我们的QA服务器上没有在GAC中安装System.Web.MVC(它们尚未被修补),因此应用程序现在失败,因为找不到System.Web.MVC。
假设上述行为是正确的,这意味着任何时候当微软通过Windows Update服务提供NuGet DLL(我们没有在GAC中的),我们的BuildServer将开始生成不完整的构建(缺少那些已被注入到GAC中的DLL)。升级到MVC 5.2解决了这个问题(可能是因为它没有被修补程序所覆盖,因此没有被注入到GAC中);该DLL现在被复制到输出文件夹。升级到5.2.2的差异中没有任何更改,除了版本号的变化(特别是没有添加/编辑节点)。我们不希望开始GAC所有东西,也不希望创建手动构建步骤来复制我们所有的DLL到bin文件夹中,以防万一微软修补它们。那么,今天我们可以改变什么来确保我们永远不会在未来出现BuildServer默默地生成错误的构建?