是否可以从针对.NET Standard 2.x的库中使用ASP .Net Core 3.1?

时间:2019-12-13 16:03:18

标签: .net asp.net-core

我确实有许多针对经典.NET Framework 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. .net core 3.x不再生成我们当前使用的NuGet软件包。 从.net core 3.0开始,仅在Core运行时中安装框架DLL。

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

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

据我所知,我必须继续使用Asp .NET Core 2.1。

我的假设正确吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

现在已通过FrameworkReference包含了ASP.NET Core 3.0+,因此大多数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 Core2.x。如果仅打算支持3.x,则以.NET Core为目标,添加框架引用,然后将其命名。无需担心其他任何事情。如果要做也需要支持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>