从第三方依赖项解析/使用多个程序集版本

Chr*_*air 5 .net silverlight assemblies multiple-versions

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

这是对依赖关系的描述: 依赖树

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

在同一解决方案中引用2个不同版本的log4net

在同一文件夹中使用同一程序集的不同版本

第三方库引用不同版本的log4net.dll

如何处理多个版本的依赖项?

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

1)我很可能会说服第三方库的供应商更新以使用最新版本的WriteableBitmapExtensions,但我更愿意不依赖它们使其保持最新状态.特别是因为WriteableBitmapExtensions项目仍在更新,我们经常利用他们的新功能.

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

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

Mar*_*urd 1

正如我在评论中所说,选项 1 应该随时可用,因为“v1”实际上是“预测试版”版本。

如果第 3 方供应商延迟发布使用非 Beta 版本的构建,则选项 2 是您的下一个选择。只需确保为您的构建使用全新的标识MyWriteableBitmapExtensions:具体使用不同的 AssemblyName、FileName、强名称签名以及用于标识的任何 GUID(包括 COM)。

如果您不需要新功能或者 v2 向后兼容 v1,程序集绑定仍然是更好的选择——我还没有确认这是否适用于 Silverlight,但如果不是的话我会感到惊讶尽管我现在同意真正的程序集绑定在 Silverlight 中可能不可用,因为 Silverlight 中缺少整个 System.Configuration 命名空间(除了 中的两个枚举System.Configuration.Assemblies)。

尽管如此,另一种选择是调整最新的源代码,以便它确实产生向后兼容 v1 的东西,如果必须的话,也许会破坏 v2 功能——这样 v2 功能仍然可以使用,只需使用重新编译,现在使用原始标识(程序集名称、文件名、强名称签名等)。然后您应该能够再次在这两种情况下使用同一个程序集。