无法从程序集Npgsql.EntityFrameworkCore.PostgreSQL加载类型Microsoft.EntityFrameworkCore. Npgsql数据库上下文选项扩展

lmvvr0a8  于 2022-12-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(291)

我有2个EF核心项目AB
项目A具有.net6.0目标和相应的包

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.11" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.7" />

项目B具有.netcoreapp3.1目标和相应的包

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.4" />

在将B引用到A时,一切正常,但在解析项目AB的上下文时,我遇到以下异常:

System.TypeLoadException
Could not load type 'Microsoft.EntityFrameworkCore.NpgsqlDbContextOptionsExtensions' from assembly 'Npgsql.EntityFrameworkCore.PostgreSQL, Version=6.0.7.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7'.

为什么B项目的上下文不能使用它自己对Postrges包的较低版本的依赖?是否可以这样使用它,因为我不能升级项目B,也不想降级项目A

5lwkijsr

5lwkijsr1#

因此,我找到的可用选项(除了一些不受支持的外来解决方案)是:
1.带有条件包引用的多目标项目B。例如Multiple target framework project: different versions of the same NuGet package on different frameworks?在我的例子中,它是
第一个月
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'"> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.11"/> <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1"/> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0"/> <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.7"/> </ItemGroup>
1.通过web API或消息队列(取决于您与上下文数据进行的交互类型)将数据请求代理到上下文,结果会破坏直接引用。

相关问题