同时针对 ef core 3.1 和 5 是个好主意吗?
Posted
技术标签:
【中文标题】同时针对 ef core 3.1 和 5 是个好主意吗?【英文标题】:Is it a good idea to target both ef core 3.1 and 5? 【发布时间】:2021-06-12 14:08:52 【问题描述】:我有一个小型 nuget 包,它与一个带有 2 个表的小型数据库交互。我在 2 个项目中使用过它,1 是 dotnet 5,另一个是旧的 dotnet 框架 4.6,因此我的目标是 netstandard2.0,到目前为止它运行良好。
我需要将 dotnet 5 中的所有软件包更新到最新版本,但 ef core 5 需要 dotnet 标准 2.1。最好的处理方法是什么?
我考虑过多目标,但首先我不知道这是否是个好主意,然后我不知道如何用 ef 5 和 dotnet standard 2 来定位 dotnet standard 2.1使用 ef 3.1。
【问题讨论】:
imo,针对两者都很好。更少的维护工作,集中的代码。只需要一些#if NET5
或类似的smt 来保持差异(如果有的话)。您可以编写一个 shell 脚本来同时为两个版本构建和发布到 nuget
like this 我为 AspNetCore 2.1 和 2.2 发布了这个项目。所以任何项目 2.1 都可以使用 nuget 2.1 包等等
【参考方案1】:
针对多个版本的 EF Core(或任何其他包)可以,但请记住,它会影响包的可维护性,因此只有您可以决定是否值得。
您是否将从 EF Core 5 的任何特定功能/性能改进中受益? 您和您的用户是否可以接受不同的行为?如果没有,请重新审视上一点,因为您可能需要调整代码以实现这一点,忽略一些 EF Core 5 附加组件。 等关于实施:
您可以通过在ItemGroup
级别使用Condition
并检查$(TargetFramework)
的值来解决项目引用问题。
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.13" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' != 'netstandard2.0' ">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
</ItemGroup>
在您的 C# 代码中,您需要使用预处理器指令 (#if NETSTANDARD2_0
) 来区分这两种实现。
您可以阅读有关 .csproj 和 C# 解决方案here 的更详细文档。
【讨论】:
以上是关于同时针对 ef core 3.1 和 5 是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5 中动态编辑 .env 是个好主意吗?
包含在FromSqlRaw和EF Core 3.1中的存储过程中