【问题标题】:Versioning issues with assemblies程序集的版本控制问题
【发布时间】:2011-02-17 07:57:40
【问题描述】:

假设我有两个程序集:

MyExecutable.dll    version 1.0.0
MyClassLibrary.dll  version 1.0.0

现在,MyExecutable.dll 当前使用MyClassLibrary.dll 的类和方法(其中包括一些算法)。这些算法中的大多数都是在运行中制作的,稍后我会在需要时对其进行改进。这意味着,我不会更改这些类的 interface,但代码本身会发生一些变化。

手头的问题是,MyExecutable.dll 将期待 MyClassLibrary.dll 1.0.0,我希望它使用 1.0.1 版(或类似版本)。我不想重新编译MyExecutable.dll(因为实际上使用MyClassLibrary.dll 的可执行文件可能不止一个)。这个问题有解决方案吗?我听说过GAC,但如果可能的话,我想远离它。

谢谢

【问题讨论】:

    标签: c# .net vb.net assemblies versioning


    【解决方案1】:

    您正在寻找 Assembly Binding Redirection - 这是一种可配置的方式来告诉 .NET 使用哪个版本的程序集。

    【讨论】:

    • 在这种情况下应该应用于.exe还是.dll?我的意思是,到哪个配置文件?
    • 使用重定向程序集的任何配置 - 可能是 .exe 配置。
    • 但这意味着每次我必须更新库时,我都必须检查可能正在使用该库的所有其他程序集。难道不能只在库本身上有一个配置文件,这样就可以更新库,库的配置文件,仅此而已?
    • @devoured elysium - 这就是系统的工作原理......如果不同的exe文件需要不同的版本?这个想法是您配置 exe 以确切地知道它需要什么版本。希望需要特定配置的那些是规则的例外,而不是规范。
    【解决方案2】:

    第一个解决方案是程序集绑定重定向,已被 Oded 推荐。
    如果您有一个较小的 .dll 并希望在其较新版本上运行某些东西,这将是有利的。

    第二个选项是为接口创建一个单独的程序集,并仅引用可执行文件中的程序集。
    这样,您可以允许第三方针对您的库构建内容,而无需向他们提供确切的库程序集。 (例如,他们不能用 Reflector 反编译它,所以这样更安全。)
    只要接口组件不改变,您可以随意更改库中的其他内容。

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多