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

发布于 2025-01-12 07:50:00 字数 1286 浏览 0 评论 0原文

我使用 EntityFramework 5.0.13 组合了一个 .Net 5 for Windows 应用程序。

现在我们尝试在尚未安装 .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 添加属性(或将其替换为另一个节点),以便它仅针对特定的目标框架?

I've put together a .Net 5 for Windows application, using among other things EntityFramework 5.0.13.

Now we're trying to run it on a specific server, that doesn't have the .Net 5 framework yet. The nice people who admin the server tell me that they've tried to install new things, but can't seem to make the application run. Restarting the server might be necessary, which cannot be done for the time being.

So I need to use an older target framework for my application. Fine, so I decided to target multiple frameworks, adding .Net Framework 4.8 as well. In my .csproj file, that amounts to replacing

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

with

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

and that should do the trick.

Unfortunately, EntityFramework 5.0.13 is not compatible with .Net Framework 4.8.

So I used an older version, 3.1.9 (that works fine on another of our projects).

It took a bit of convincing, but now my project uses 3.1.9. (And I trust that it will build fine once I downgrade a few Class variable = new(); and if (variable is not null) statements.)

Now, what I'm wondering about is, can I get my .Net 5 target framework to use EntityFramework 5.0.13 again instead of 3.1.9?

Right now, my .csproj file reads

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

Before I started to use multiple target frameworks, that was

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

Is there a way to add an attribute to PackageReference (or replace it with another node) so it only targets a specific framework?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魄砕の薆 2025-01-19 07:50:00

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

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

这是 https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference-condition,这给出了如果需要更多详细信息。

A simple way to do it is to add the <PackageReference ...> nodes conditionally:

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

This is a modified example from https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference-condition, which gives more details if required.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文