多目标框架项目:同一 NuGet 包在不同框架上的不同版本?

Multiple target framework project: different versions of the same NuGet package on different frameworks?

我已经为 Windows 应用程序组装了一个 .Net 5,其中使用 EntityFramework 5.0.13.

现在我们正在尝试 运行 它在特定服务器上,该服务器还没有 .Net 5 框架。管理服务器的好心人告诉我他们已经尝试安装新东西,但似乎无法创建应用程序 运行。可能需要重启服务器,暂时无法完成。

所以我需要为我的应用程序使用旧的目标框架。很好,所以我决定以多个框架为目标,同时添加 .Net Framework 4.8。在我的 .csproj 文件中,这相当于替换

    <TargetFramework>net5.0-windows</TargetFramework>

    <TargetFrameworks>net5.0-windows;net48</TargetFrameworks>

这应该可以解决问题。

很遗憾,EntityFramework 5.0.13 与 .Net Framework 4.8 不兼容。

所以我使用了旧版本 3.1.9(在我们的另一个项目中运行良好)。

花了点说服力,现在我的项目用的是3.1.9。 (而且我相信,一旦我降级了一些 Class variable = new();if (variable is not null) 语句,它就会构建良好。)

现在,我想知道的是,我能否让我的 .Net 5 目标框架再次使用 EntityFramework 5.0.13 而不是 3.1.9?

现在,我的 .csproj 文件显示为

    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.9" />

在我开始使用多目标框架之前,那是

    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.13" />

有没有办法向 PackageReference 添加一个属性(或用另一个节点替换它)以便它只针对特定的框架?

一个简单的方法是有条件地添加 节点:

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.9" Condition="'$(TargetFramework)' == 'net48'" />
    <!-- ... -->
</ItemGroup>

这是 https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference-condition 的修改示例,如果需要,它会提供更多详细信息。