2

目标:在不保存或将工件添加到存储库的情况下控制输出 dll。

主要问题是我的解决方案中有两个第 3 方包(.net 框架 4.6.1):rabbitMQClient V6.0.0 使用 - system.memory (>= 4.5.4) -> System.Runtime.CompilerServices.Unsafe ( >= 4.5.3)

使用 System.Runtime.CompilerServices.Unsafe (>= 5.0.0) 的 MongoBson v2.12.1(例如)

每个包都提供以下具有不同版本的 System.Runtime.CompilerServices.Unsafe.dll,并且由于它们是不同的项目,因此它们中的每一个都覆盖输出目录中的另一个。

我尝试了什么:如果我尝试降级“CompilerServices.Unsafe”,则 mongoDb 连接因异常而失败 - 'MongoDB.Driver.Core.Misc.DnsClientWrapper 的类型初始化程序...”

如果我升级,那么兔子将无法连接 - 内部异常:无法加载文件或程序集。

我尝试使用重定向,但似乎它不起作用(如果是新版本的 dll,rabbitMq 异常)

解决方案起作用的唯一可能性是,如果我在所有项目中将本地副本设置为 false,但使用旧版本的项目除外,由于在 NuGet 更新时它将设置为 true,我需要更稳定的解决方案。

4

1 回答 1

0

降级不是一个可行的选择;升级通常应该可以工作,但您需要修复程序集绑定System.Runtime.CompilerServices.Unsafe众所周知,这里是一个主要的痛苦之一,由于自动绑定生成代码不适合它的事实而变得复杂;Nick 对如何在此处执行此操作有很好的指导- 主要配置示例碰巧使用System.Runtime.CompilerServices.Unsafe,因此应该只是添加当前版本号的情况。

这是在 .NET Core / .NET 5 及更高版本中变得容易得多的许多事情之一。

于 2021-05-27T14:53:19.213 回答