这是Windows update caused MVC3 and MVC4 stop working
的后续内容我还遇到了我的开发机器上的Windows更新导致我的MVC 4项目停止工作的问题。我将程序集引用更改为目标版本4.0.0.1,它开始工作。对我来说。
我的问题是该应用程序随后部署在许多Web服务器上。实际上,我们有一个构建服务器,其中构建了客户版本,然后是一些Web服务器。
第一个问题:当我们在生产服务器上运行Windows更新时,旧版本的应用程序将停止工作吗?我猜答案是“是”。我们还没有在构建或生产机器上运行Windows更新。
更改引用意味着它不再可以在构建计算机上构建。我可以通过将Specific Version标志设置为false并将Local Local设置为true来解决此问题。然后它建立在我的开发环境和构建服务器上。
问题:如果我的特定版本为假,检查有多松散?它是否允许4.0.0.x? 4.0.x.x? 4.x.x.x?或x.x.x.x?
然而,它甚至在thsi配置中构建它然后无法在测试Web服务器上运行(无法找到程序集)。这里的问题是我的web.config中有以下内容(根据我从MVC 2升级到MVC 4时的微软说明):
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity culture="neutral" name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35"/>
<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect newVersion="4.0.0.0" oldVersion="1.0.0.0-3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
问题在于
行<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
用于System.Web.Mvc程序集。 (当然,在该行中,4.0.0.0
而不是4.0.0.1
。)如果我在测试服务器上更改回4.0.0.0
,那么它可以正常工作。
我的问题是双重的。部分原因是我希望能够在本地和我们的构建/生产服务器上构建和运行。但是,我们遇到一些情况,我们在同一台服务器上托管了许多运行不同版本应用程序的客户。我们不能强迫所有客户立即升级到最新版本只是因为这个Windows更新修复 - 除了Web应用程序只是更大的应用程序套件的一部分,所以我们必须强制他们升级这个批次! / p>
我想一个选项是检查每个仍在使用的旧版本,更新MVC版本号并创建一个新版本。然后,当我们更新Web服务器时,我们必须将该服务器上的所有客户更新为其当前版本的新(4.0.0.1兼容)版本。我真的很想避免在可能的情况下更新,提交和重建那么多版本。
另一个选择是不在Web服务器上运行Windows更新,并尝试在构建计算机上安装4.0.0.0和4.0.0.1 dll。然后我们可以构建新旧版本。由于任何新版本(使用4.0.0.1)都在MVC程序集上将CopyLocal设置为true(旧版本没有),因此它们应该能够部署到Web服务器,而不会更新Web服务器。
问题:
bindingRedirect
到4.0.0.x?还是可以简单地删除绑定重定向?我无法相信我是这种情况下唯一的人,也欢迎任何我根本没想过的解决方案的建议。
答案 0 :(得分:0)
我是一个团队成员,从一个稍微不同的角度遇到同样的问题。它在安全更新错误时发布的错误消息可能会产生误导并且难以解释。当我们尝试将应用程序发布到不同的环境时,我们遇到了部署和构建错误。根本原因是这个补丁是通过某些测试环境中的Windows更新应用的,而不是在其他服务器上应用的。当我们部署应用程序时,任何没有补丁的服务器都会崩溃。我建议让您的系统团队应用补丁并升级所有应用程序以引用此DLL。 Security updates因为引用的库在源代码管理中被忽略,但仍然在Web配置中详细说明,需要快速解决。某些环境允许您右键单击并选择在本地使用哪个MVC DLL版本,并仍然可以毫无问题地部署您的应用程序。如果您正在使用Web部署,并且必须能够切换,您可以为每个Transforms web config编写Web配置转换。在修复此问题(升级到4.0.0.1)时我注意到的一件事是在我的项目中升级到最新版本的MVC.dll允许我获取最新版本的nuget包。如果您不升级并保留旧版本,您将无法使用旧版本的MVC javascript,jquery和其他库。