【问题标题】:Resolving/using multiple assembly versions from 3rd party dependencies解析/使用来自 3rd 方依赖项的多个程序集版本
【发布时间】:2012-04-14 10:05:18
【问题描述】:

在我的项目中,我的依赖层次结构存在问题。我在我的代码中使用了一个库 (WriteableBitmapExtensions),并且我还有另一个也使用 WriteableBitmapExtensions 的第 3 方库。只有另一个库与特定的旧版本紧密相关,我的代码需要最新版本的功能。

这是对依赖项的描述:

有类似的问题和解决方案,但他们通过配置文件在运行时通过程序集绑定解决了这个问题,但我认为这与 Silverlight 应用程序不兼容。

Referencing 2 different versions of log4net in the same solution

Using different versions of the same assembly in the same folder

3rd party libraries refer to different versions of log4net.dll

How to deal with multiple versions of dependencies?

那么有没有办法在 Silverlight 上下文中解决这些不同版本的程序集依赖项?如果没有,我想我的选择是:

1) 很可能我可以说服第 3 方库的供应商更新以使用最新版本的 WriteableBitmapExtensions,但我不希望依赖他们保持最新。尤其是 WriteableBitmapExtensions 项目仍在更新中,我们经常利用它们的新功能。

2) 由于 WriteableBitmapExtensions 是开源的,我想我可以将它的源代码重新编译为一个新的程序集“MyWriteableBitmapExtensions”并在我的源代码中使用它。但是如果两个 3rd 方库引用不同版本的 WriteableBitmapExtensions,我会再次遇到这个问题。

我怀疑我会使用选项 2,但我想知道在我提交/重构之前是否有更好的方法(如其他问题中的运行时程序集绑定)。谢谢!

【问题讨论】:

    标签: .net silverlight assemblies multiple-versions


    【解决方案1】:

    正如我在评论中所说,选项 1 应该是现成的,因为“v1”实际上是“pre beta”版本。

    如果第 3 方供应商延迟发布使用非 beta 版本的构建,您的选项 2 是您的下一个选项。只需确保为 MyWriteableBitmapExtensions 的构建使用全新的身份:特别是使用不同的 AssemblyName、FileName、强名称签名和任何用于身份的 GUID,包括用于 COM。

    如果您不需要新功能,或者如果 v2 向后兼容 v1,则程序集绑定仍然是更可取的选项 -- 我尚未确认 Silverlight 是否提供此功能,但我'如果不是,我会感到惊讶,尽管我现在同意在 Silverlight 中可能无法使用真正的程序集绑定,因为 Silverlight 中缺少整个 System.Configuration 命名空间(System.Configuration.Assemblies 中的两个枚举除外)。

    尽管如此,另一种选择是调整最新的源代码,使其确实产生向后兼容 v1 的东西,如果必须的话,可能会破坏 v2 的特性——以这样的方式v2 功能仍然可以使用,只需重新编译,现在使用原始身份(AssemblyName、FileName、强名称签名等)。然后您应该能够再次将一个程序集用于这两种情况。

    【讨论】:

    • 在写完这个答案后,我才真正查看了 WriteableBitmapExtensions 项目,我现在意识到你所说的 v1 实际上几乎肯定是一个 pre-beta i> 版本,最新的是 v1 beta。因此,选项 (1) 变得更像是一种选择——第 3 方供应商应该很乐意在非 beta 版本可用时重新发布它。
    • 我现在再次编辑了这个答案,因为它看起来像 Silverlight 支持程序集绑定:-(
    • 是的,这也是最初的想法。我确实希望这个特定的供应商会更新;他们这样很好。我确实担心其他库,并且想知道是否有完整/正确的解决方案(如程序集绑定),特别是因为整个“开源,重新编译”选项可能并不总是可用,但看起来可能没有是。感谢您更新身份 GUID 和强名称的说明,我可能忽略了这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2014-12-03
    • 2014-06-09
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多