【问题标题】:Loading an assembly from any version从任何版本加载程序集
【发布时间】:2011-01-15 19:42:28
【问题描述】:

我正在引用一个已签名的程序集。在运行时,我可以使用该程序集的任何版本,而不仅仅是我编译成的那个。

如何做到这一点?

【问题讨论】:

  • 您能否适当地更改问题的标题,以便人们搜索?

标签: c# assemblies version assemblyversions


【解决方案1】:

不,那是行不通的。 CLR 将验证程序集版本号,期望得到您的主程序编译所针对的版本号。您必须使用 app.config 文件中的 <bindingRedirect> element 来说服它可以使用不同的版本。

这是一个滑坡。如果程序集的公共接口发生更改并且需要重新编译客户端,请考虑仅更改 [AssemblyVersion] 属性。现在,您将得到的异常是识别出真正问题的异常。这是另一种滑坡,但您将拥有更多的控制权。

作为比较,这是 .NET 框架中所有基础程序集的工作方式。在 .NET 2.0 RTM 和 3.5 SP1 之间已经有许多个修订版,包括许多不可见的修补程序。但是【AssemblyVersion】还是2.0.0.0,微软只修改了【AssemblyFileVersion】。

【讨论】:

    【解决方案2】:

    在 IDE 中,确保针对引用将“特定版本”设置为 false,或者将 <SpecificVersion>False</SpecificVersion> 添加到 csproj 中的引用中。

    【讨论】:

    • @Marc:运行时将如何确定要加载哪个程序集(多个版本中)? (我假设一个签名的程序集被放置在 GAC 中)。
    • @Marc:我搜索了我在上面问过你的问题,运行时似乎会选择最新版本的程序集。对吗?
    • @shahkalpesh - 我不知道;我几乎从不使用 GAC
    • @Yaron Naveh - 应该这样做。事实上,IIRC 它不能可靠地作为“仅使用特定版本”除非它被签名。
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多