为什么ASP.NET中需要绑定重定向?

时间:2014-04-26 16:44:47

标签: asp.net asp.net-mvc assemblies webgrease

简介

今天我更新了我的ASP.NET MVC应用程序,我遇到了以下错误(在德语 - 抱歉):

  

Die Datei oder Assembly“WebGrease,Version = 1.5.1.25624,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”odereineAbhängigkeitdavonwurde nicht gefunden。 Die gefundene Manifestdefinition der Assembly stimmt nicht mit demAssemblyverweisüberein。 (Ausnahme von HRESULT:0x80131040)

(它说集合“WebGrease,版本1.5.1.25624”找不到)

程序集System.Web.Optimization,Version = 1.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35尝试加载WebGrease程序集并失败。

解决方案

我知道可以通过在web.config中添加绑定重定向来轻松绕过此问题(因为我更新了WebGrease):

  <dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.6.5135.21930" />
  </dependentAssembly>

进一步的问题

知道为什么需要以及如何创建* .Optimization程序集会非常好。 System.Web.Optimization 1.1.3程序集依赖于WebGrease 1.5.2并且“只需使用其他版本的WebGrease”-redirect可能会导致方法调用,新版本中不再存在这种方法调用,不是吗?

* .Optimization的开发人员是否在他们的Project中包含对WebGrease 1.5.2的引用,在构建和创建NuGet包之后删除了WebGrease程序集?或者他们是否在代码中加载程序集?

对此工作原理的任何解释都非常感谢。谢谢。

2 个答案:

答案 0 :(得分:1)

Taken from MSDN doc关于此事:

  

您可以手动编辑应用配置文件以解决装配问题   的问题。例如,如果供应商可能会发布更新版本   您的应用使用的汇编而不提供发布商政策,   因为他们不保证向后兼容性,你可以直接   您的应用程序通过放置程序集来使用较新版本的程序集   应用程序配置文件中的绑定信息。

我很久以前也遇到过同样的问题......无论如何我认为这是NuGet包的问题,​​根据Code {{{}}的work item

答案 1 :(得分:1)

  • 1)需要覆盖程序集清单中指定的条目,该程序集引用了使用常规绑定策略找不到的程序集的违规版本。 (也就是说,探测典型的场所组件)。
    • 1a)可能存在重大变化,但人们希望对所讨论的装配进行某种宽容版本控制。也许某种语义版本控制系统。
  • 2)和Leniel一样,从Nuget下载程序集时遇到了这个问题。根据我的经验,组装A和B需要组装,比如C,但是当使用Nuget下载组件B时 - 它已经踩到了A正在使用的组件C的版本。既令人困惑又令人沮丧。
相关问题