【问题标题】:Handling references to System.Web.Mvc after security update [duplicate]安全更新后处理对 System.Web.Mvc 的引用 [重复]
【发布时间】:2014-12-12 18:35:20
【问题描述】:

我正在开发一个 ASP.NET MVC 3 解决方案(在 Visual Studio 2010 中工作),它在多个项目中引用了 System.Web.Mvc 的特定版本 (3.0.0.0)。

这样做是为了让解决方案在安装了更高版本的 MVC 的机器上构建。

我们成为昨天发布的 MVC 安全更新 (System.Web.Mvc not functioning as expected after Windows Update) 的受害者,其中 System.Web.Mvc DLL 版本已增加到 3.0.0.1

这可以很容易地在我的开发机器上修复。

我的问题是,如果我将每个引用 System.Web.Mvc 的项目更改为使用 3.0.0.1 构建,然后部署到 GAC 中仍然有 3.0.0.0 的服务器,我的应用程序仍然可以正常工作吗?

我知道有一些方法可以将 MVC DLL 作为部署的一部分包含在内,但我希望对当前的构建/部署过程进行尽可能少的更改。

【问题讨论】:

    标签: c# asp.net asp.net-mvc windows-update


    【解决方案1】:

    尝试将以下内容添加到您的 Web.config 中的 元素中

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
    

    未经测试,但这应该可以。

    【讨论】:

    • 谢谢 - 您能否详细说明此重定向为何/如何起作用?
    • 您的项目引用(在 .csproj 文件中)将指向 System.Web.Mvc 版本 3.0.0.1,因此您的项目将针对新版本进行编译。但是针对 System.Web.Mvc 的所有运行时调用都将尝试使用 DLL 的 3.0.0.0 版本。由于这只是一个安全修复版本,3.0.0.1 DLL 中的所有方法签名等可能与 3.0.0.0 DLL 中的完全相同,因此在这种情况下应该可以正常工作。
    • 用 3.0.0.1 版本的 DLL 更新服务器后会发生什么?
    • 我现在做了一个测试,即使在使用 DLL 的 3.0.0.1 版本更新服务器后,它似乎也能正常工作。换句话说,它将开始毫无问题地使用 3.0.0.1 版本的 DLL。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 2014-04-25
    • 2012-04-02
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多