EntityFrameworkCore 和 net48

EntityFrameworkCore and net48

我有一个 class 库,它为 EntityFrameworkCore 提供了一些可重复使用的糖,目前它的目标是 netstandard2.0;netstandard2.1

我有一些项目引用了这个 class 库,其中大部分以 netcore 为目标,但其中一些以 net48.

为目标

更新对 net50EFCore 5.0 的引用,我发现 EFCore 5.0 no longer supports 目标 netstandard2.0 / net48.

如果我希望 net48net50 使用我的 class 库,我相信我必须:

有没有办法将 单个 库构建为 netstandard2.0 引用 EFCore 3.1.10netstandard2.1 引用 EFCore [=26] =].

我认为这不切实际,“正确”的答案是两个不同的库。

NuGet打包为这种情况提供了解决方案。 (我需要 NuGet 201 课程!)

如果这对其他人有帮助,在我的 .csproj 中,我添加了:

<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
[...]
<Choose>
  <When Condition=" '$(TargetFramework)' == 'netstandard2.0'">
    <ItemGroup>
      <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.13" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
    </ItemGroup>
  </Otherwise>
</Choose>

当与 dotnet pack myproject.csproj 一起打包时,会产生:

<dependencies>
    <group targetFramework=".NETStandard2.0">
        <dependency id="Microsoft.EntityFrameworkCore" version="3.1.13" exclude="Build,Analyzers" />
        [...]
    </group>
    <group targetFramework=".NETStandard2.1">
        <dependency id="Microsoft.EntityFrameworkCore" version="5.0.4" exclude="Build,Analyzers" />
        [...]
    </group>
</dependencies>

测试使用时:

  • 针对 .net48,已安装 3.1.13 版本
  • 针对 .net5.0,已安装 5.0.4 版本

缺点:

  • Visual Studio的NuGet管理器不能用于更新条件版本;您将需要手动更新这些部分。
  • 测试需要有类似的条件部分

编辑:我发现创建一个管理此条件引用的“包装项目”很方便:例如我有一个 MyData 项目/NuGET 包,它是包含 EntityFramework 的代理。所有其他有条件地需要 EntityFramework 的项目,只需引用 MyData。这使 <Choose> 仅保留在 1 个项目中,所有其他项目都可以一如既往地获取最新信息。

归功于 Mark Heath's article