这是一个后续到Windows update caused MVC3 and MVC4 stop working如何从ASP MVC版本4.0.0.0处理转换到4.0.0.1
我也有我的地方开发计算机上的Windows Update使我的MVC 4项目停止工作的问题。我将程序集引用更改为目标版本4.0.0.1,并开始工作。为了我。
我的问题是,该应用程序然后部署在一些Web服务器上。实际上,我们有一个构建服务器,在其中构建客户版本,然后构建多个Web服务器。
第一个问题:当我们在生产服务器上运行windows update时,旧版本的应用程序将停止工作?我猜测答案是“是”。我们还没有在构建或生产机器上运行Windows Update。
更改引用意味着它不再可以构建在构建机器上。我可以通过将特定版本标志设置为false并将本地复制为true来解决此问题。然后它建立在我的开发环境和构建服务器上。
问题:如何检查我的特定版本是否为false?它允许4.0.0.x吗? 4.0.x.x? 4.x.x.x?或x.x.x.x?
但是,即使它构建在配置中,它仍然无法在测试Web服务器上运行(无法找到程序集)。这里的问题是,我在我的web.config以下(按当我升级从MVC 2至4 MVC微软说明):
<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应用程序只是更大的应用程序套件的一部分,所以我们将不得不迫使他们升级!
我想有一个选择是检查每个仍在使用的旧版本,更新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服务器本身。
问题:
- 有谁知道是否有可能有同时安装两个版本?我希望我可以简单地保存4.0.0.0的DLL,运行Windows Update然后复制到旧的dll与新的一起回到GAC。
- 此补丁修复的安全风险有多严重?让人们长时间运行旧版本会有问题吗?只是让Web服务器上的旧.dll存在安全风险,或者仅限于使用它的应用程序?
- 有没有办法做到
bindingRedirect
到4.0.0.x?还是有可能完全删除绑定重定向?
我不能相信我是唯一一个在这种情况下,也会欢迎任何解决方案,我没有想到的建议。