多目标框架项目:同一 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 的修改示例,如果需要,它会提供更多详细信息。
我已经为 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 的修改示例,如果需要,它会提供更多详细信息。