加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何处理从ASP MVC版本4.0.0.0到4.0.0.1的转换

发布时间:2020-12-16 07:41:18 所属栏目:asp.Net 来源:网络整理
导读:这是 Windows update caused MVC3 and MVC4 stop working的后续行动 我还遇到了我的开发机器上的Windows更新导致我的MVC 4项目停止工作的问题.我将程序集引用更改为目标版本4.0.0.1,它开始工作.为了我. 我的问题是该应用程序然后部署在许多Web服务器上.实际
这是 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应用程序只是更大的应用程序套件的一部分,所以我们必须强制他们升级这个批次!

我想一个选项是检查每个仍在使用的旧版本,更新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更新然后复制到旧的dll和新的一起回到GAC.
>此补丁修复的安全风险有多严重?允许人们运行旧版本一段时间是一个问题吗?只是让Web服务器上的旧.dll存在安全风险,或者只针对使用它的应用程序?
>有没有办法绑定到4.0.0.x的绑定?或者是否可以简单地完全删除绑定重定向?

我无法相信我是这种情况下唯一的人,也欢迎任何我根本没想过的解决方案的建议.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读