【问题标题】:Is it possible to use ASP .Net Core 3.1 from a library that targets .NET Standard 2.x?是否可以从面向 .NET Standard 2.x 的库中使用 ASP .Net Core 3.1?
【发布时间】:2020-04-07 02:40:27
【问题描述】:

我确实在针对经典 .NET 框架 4.7.2 的 DLL 文件中实现了许多业务功能。 去年我创建了一个 REST API 以使 REST 客户端可以访问此功能。 我在使用“netstandard2.1”的新 DLL 中实现了 REST API。

我通过引用 NuGet 包来包含 ASP.NET Core 2.2 版库。 我确实从 REST API 引用了我的经典 .NET 4.7.2 DLL。

这行得通...

我现在想升级此 DLL,以便它使用 ASP.NET Core 3.1 库。

尝试更新到 .net core 3.1 时遇到了问题,即我们找不到 ASP.net core 3.1 的更新 NuGet 包。

在网上搜索后,我现在的“图片”是这样的:

  1. 我们当前使用的 NuGet 包不再为 .net core 3.x 生成。 从 .net core 3.0 开始,框架 DLL 仅与 Core 运行时一起安装。

  2. Asp。 Net Core 3.x 只能托管在以 .Net Core 为目标的 DLL 中。 不再可能托管在以 .Net Standard 为目标的 DLL 中。

我在阅读了几个网页后得到了这个印象 - 我在 .net core 3.x 的发行说明中没有找到此信息。

据我所知,我必须留在 Asp .NET Core 2.1 上。

我的假设正确吗?

谢谢!

【问题讨论】:

标签: .net asp.net-core


【解决方案1】:

ASP.NET Core 3.0+ 现在通过FrameworkReference 包含在内,因此大多数 NuGet 包都已消失。这些库现在来自 SDK/运行时,因此没有必要将它们作为 NuGet 包含在内。当然,除非您尝试针对 .NET Standard 之类的东西。

但是,值得牢记的是,任何对 ASP.NET Core 功能的引用都会将您的库限制为 .NET Core。其他目标,如 Xamarin、Unity 等,无论如何都不会使用其中的任何一个。您真正失去的唯一东西是 .NET Framework,但如果您跳到 .NET Standard 2.1,那么您已经失去了它。如果库中的逻辑应该可用于 .NET Core 以外的目标,那么您实际上应该将其移出到一个单独的库中,您可以在其中继续针对 .NET Standard,同时允许您的 ASP.NET Core-与目标 .NET Core 相关的逻辑。

那么,唯一真正关心的是除了 3.x 之外,您是否还需要支持 ASP.NET Core 2.x。如果您只打算支持 3.x,那么以 .NET Core 为目标,添加框架引用,然后称之为 day。无需担心其他任何事情。如果您确实也需要支持 2.x,那么您可以多目标和使用条件来交替添加框架引用或包引用:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' != 'netcoreapp3.0'">
    <!-- reference 2.x NuGet packages instead -->
  </ItemGroup>

</Project>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2021-05-13
    • 2020-04-03
    • 2020-03-20
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多