【问题标题】:EntityFrameworkCore and net48EntityFrameworkCore 和 net48
【发布时间】:2020-11-13 15:55:17
【问题描述】:

我有一个类库,它为EntityFrameworkCore 提供了一些可重用的糖,它目前针对netstandard2.0;netstandard2.1

我有引用这个类库的项目,其中大部分以netcore为目标,但也有少数以net48为目标。

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

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

  • Microsoft.EntityFrameworkCore 软件包限制为 5.0 之前的版本 (version=[3.1.10,5.0)),或
  • 创建两个库:
    • 其中一个以netstandard2.0 为目标并引用EFCore 3.1.10
    • 其他目标 netstandard2.1 和引用 EFCore 5.0

有没有办法让一个单个库构建到 netstandard2.0 引用 EFCore 3.1.10netstandard2.1 引用 EFCore 5.0

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

【问题讨论】:

  • 您需要两个库,可能共享相同的代码。

标签: entity-framework-core .net-standard-2.0 .net-framework-4.8


【解决方案1】:

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。这将&lt;Choose&gt; 保留在仅 1 个项目中,所有其他项目都可以像往常一样获取最新版本。

感谢Mark Heath's article

【讨论】:

    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多