2014-10-22 29 views
5

这是一个后续到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?还是有可能完全删除绑定重定向?

我不能相信我是唯一一个在这种情况下,也会欢迎任何解决方案,我没有想到的建议。

回答

0

我是一个从稍微不同的角度遇到同样问题的团队的成员。它在安全更新错误时发布的错误消息可能会引起误解并且难以解释。当我们尝试将我们的应用发布到不同的环境时,我们遇到了部署和构建错误。根本原因在于,此修补程序是通过Windows Update在某些测试环境中应用的,而不是在其他服务器上应用的。我们部署应用程序时,任何没有该补丁的服务器都会崩溃。我建议让您的系统团队应用此修补程序并升级您的所有应用程序以引用此DLL。 Security updates由于引用的库在源代码管理中被忽略,但仍然在Web配置中详细地阐述了它需要快速解决。一些环境将允许您右键单击并选择在本地使用哪个MVC dll版本,并仍然可以毫无问题地部署您的应用程序。如果您正在使用Web部署,并且必须能够切换,则可以为每个Transforms web config编写Web配置转换。我在修复这个问题(升级到4.0.0.1)时注意到的一件事是,在我的项目中升级到最新版本的MVC.dll允许我获得最新版本的nuget软件包。如果您不升级并保留旧版本,那么您将陷入旧版本的MVC javascript,jquery和其他库。