【问题标题】:How to not require specific version of an assembly如何不需要特定版本的程序集
【发布时间】:2012-07-13 21:43:45
【问题描述】:

我正在处理一个项目,该项目引用了一个引用程序集的程序集,如下所示:

Me
 |- A
 |  |- B v1.4.2
 |
 |- B v1.5

A 不需要特别引用1.4.2,只要大于1.4 左右即可。在A 的引用属性中,B 说“特定版本= False”,但是当我使用B v1.5 运行Me 时,我得到一个FileLoadException 来寻找B v1.4.2。但是,B v1.5 存在,如何让 CLR 不关心?

【问题讨论】:

  • 您需要在点 1.4.* 到 1.5 处添加一个bindingRedirect
  • Redirecting Assembly Version 包含所有需要的背景信息
  • 我看到了,但是有没有一种不同的方法来编译 A,这样它就不会关心它在运行时给出的 B 版本是什么?
  • @kelloti 程序集强名称是否已签名?
  • @kelloti 如果B 签名,我不相信没有绑定重定向的方法可以做到这一点。 CLR 认为版本对于签名程序集很重要,因此 B 1.5B 1.4.2 与 C.dll 和 D.dll 一样不同。

标签: .net version .net-assembly


【解决方案1】:

虽然绑定重定向是这里的方法,但有时这是不可能的 - 即,如果您在另一个 EXE 中加载插件。我们采用的一个实际解决方案是挂钩AppDomain.CurrentDomain.AssemblyResolve 事件,侦听与myassembly1.4.2.dll 的失败绑定(例如),然后显式返回调用System.Reflection.Assembly.LoadFrom("c:\assemblies\myassembly.1.5.0.dll") 返回的程序集。绑定重定向更好,但有时并不实用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多