将 EF Core 添加到 NET Standard 项目中会引入与其他项目中 NuGet 包不兼容的传递依赖项版本
我有一个包含多个 .NET Standard 2.0 项目的解决方案。
项目 A 使用 Google.Protobuf (3.11.2)
NuGet 包,该包具有以下依赖关系:
System.Memory (4.5.3)
System.Buffers (4.4.0)
System.Numerics.Vectors (4.4.0)
System.Runtime.CompilerServices.Unsafe (4.5.2)
还有几个其他项目依赖于 System.Memory
,而且所有这些项目都使用相同的依赖版本。
另一个B 项目使用 Microsoft.EntityFrameworkCore (3.1.0)
NuGet 包,该包也是依赖于
System.Memory (4.5.3)
System.Buffers (4.5.0)
System.Numerics.Vectors (4.5.0)
System.Runtime.CompilerServices.Unsafe (4.7.0)
即使System.Memory
版本在两种情况下都是(4.5.3),但它依赖于System.Buffers
、System.Numerics.Vectors
和System.Runtime.CompilerServices.Unsafe
,它们的版本不同。当运行使用这些项目的应用程序(使用Unity IoC的Microsoft Prism WPF .NET Framework 4.8应用程序)时,UnityContainer会抛出以下异常:
在寻找解决方案后,我将此添加到我的NuGet.Config:System.IO.FileLoadException:无法加载文件或程序集'System.Runtime.CompilerServices.Unsafe,Version=4.0.4.1,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其其中一个依赖项。 找到的程序集清单定义与程序集引用不匹配。
<config>
<add key="DependencyVersion" value="Highest" />
</config>
在%appdata%\Nuget
和.sln
文件的根目录中都需要进行操作。
我也删除了%userprofile%\.nuget\packages
文件夹。
然后我从项目中删除了NuGet包,并将它们重新添加,但是它们的依赖关系与以前相同。
如果我在Visual Studio中导航到“管理解决方案的NuGet包”,并选择“合并”选项,它只会显示“未找到任何软件包”。
System.Memory
,所以我无法控制它的版本 - 它是作为Google.Protobuf
和Microsoft.EntityFrameworkCore
的依赖项安装的。 - JinjinovMicrosoft.EntityFrameworkCore
是一个 .net standard 库 ;) 如果你不相信我,你可以很容易地在 3 分钟内重现我的问题 :) - Jinjinov