gpt4 book ai didi

.net - 解析/使用来自 3rd 方依赖项的多个程序集版本

转载 作者:行者123 更新时间:2023-12-04 21:48:35 25 4
gpt4 key购买 nike

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

下面是对依赖关系的描述:dependency tree

有类似的问题和解决方案,但他们通过配置文件在运行时通过程序集绑定(bind)来解决它,但我认为这与 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) 我很可能可以说服 3rd 方库的供应商更新以使用最新版本的 WriteableBitmapExtensions,但我不希望依赖他们保持最新。特别是因为 WriteableBitmapExtensions 项目仍在更新中,我们经常利用它们的新功能。

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

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

最佳答案

正如我在评论中所说,选项 1 应该很容易获得,因为“v1”实际上是一个“pre beta”版本。

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

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

不过,另一种选择是调整最新的源代码,使其确实产生与 v1 向后兼容的东西,如果必须的话,可能会破坏 v2 功能——这样仍然可以使用 v2 功能,只需重新编译,现在使用原始标识(AssemblyName、FileName、Strong Name Signature 等)。然后,您应该能够再次将一个程序集用于这两种情况。

关于.net - 解析/使用来自 3rd 方依赖项的多个程序集版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9947747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com