如何在同一个包中使用 2 个不同版本的 dll? [复制]

Posted

技术标签:

【中文标题】如何在同一个包中使用 2 个不同版本的 dll? [复制]【英文标题】:How to use 2 separate versions of dlls in same package? [duplicate] 【发布时间】:2018-02-06 21:40:28 【问题描述】:

我有两个版本的相同 c# dll。我们将 dll 称为 foobar.dll。我有版本 11 和 12,我需要在同一个 csproj 文件中。但是,两个单独的类使用依赖项,它们需要 foobar.dll 版本 11 或 12。

作为附加限制,两个版本都不向后兼容。这主要意味着版本 11 使用对象 A 和 B 在同一个 foobar.dll 中,但版本 12 在 2 个单独的 dll foobar.dllfoobarPlugin.dll 分别。因此,仅使用版本 12 会产生运行时错误。

对于这种情况,有没有办法将 dll 版本容器化到特定的类?

【问题讨论】:

请澄清您对“包”一词的使用。请避免使用特定于 Java 的术语。 C# 不是 Java.csproj 文件不是“包”,而是“项目”。在 C# 世界中,“包”是 NuGet 中的分发单元,完全是另外一回事。 @Dai 这不是一个重复的问题,因为您提到的问题是处理版本向后兼容的情况。我想在绑定重定向中引用多个 dll 【参考方案1】:

有点难,但是你有没有想过用反射器打开这些dll并按照你想要的方式重新编译它?

【讨论】:

我试图避免这个选项。但我正在考虑这种蛮力方法 @Chiquelo 也许您可以尝试使用您将创建的自定义 dll 包装其中一个 dll 并改用您自己的 dll?也许值得一试

以上是关于如何在同一个包中使用 2 个不同版本的 dll? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使应用程序与 2 个不同版本的 DLL 一起工作

使用同一个dll的2个不同版本?

如何使用 MSBuild 引用不同版本的 dll

我如何解决Nuget DLL地狱-无论我做什么VS都坚持认为dll版本与软件包中的版本不同

从 Nuget 包中自动提取本机和托管 DLL

在运行时加载 2 个版本的程序集