我有一个带有控制台和库项目的示例解决方案。两者都引用了相同的 nuget,但版本不同。控制台项目也有对库项目的引用。所以结构是这样的:
- Solution
- ConsoleApp
- Project Reference: Library
- Nuget: NServiceBus.RabbitMQ (5.2.0)
- Library
- Nuget: NServiceBus.RabbitMQ (6.0.0)
您可以在此处找到解决方案。
由于 Nuget 使用最近的 wins 规则,因此被解析的 nuget 包是版本 5.2.0。这就是我想要的,到目前为止一切顺利。但是当我运行应用程序并运行库的方法时,我得到以下异常:
Could not load file or assembly 'NServiceBus.Transport.RabbitMQ, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
在 .NET Framework 中,我将通过程序集重定向来解决这个问题。但这在 .Net Core 中不可用。我一直认为 .Net Core 通过使用 deps.json 文件自动解决了这个问题。在那里我看到以下声明:
"Library/1.0.0": {
"dependencies": {
"NServiceBus.RabbitMQ": "5.2.0"
},
"runtime": {
"Library.dll": {}
}
}
但仍然在运行时,他尝试解析 6.0.0 版本。我正在使用最新的 .Dot Net 3.1.X SDK。
我做错了什么还是这看起来像一个错误?
作为记录,这是一个简单的示例项目。我需要这个的实际情况要复杂得多。我也明白这样做会在运行应用程序时导致运行时异常。