我确实有许多针对经典.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程序包。
在网上搜索后,我当前的“图片”是这样的:
.net core 3.x不再生成我们当前使用的NuGet软件包。 从.net core 3.0开始,仅在Core运行时中安装框架DLL。
Asp。 Net Core 3.x只能托管在以.Net Core为目标的DLL中。 不再可能以.Net Standard为目标的DLL托管。
阅读多个网页后,我得到了这种印象-我在.net core 3.x的发行说明中找不到此信息。
据我所知,我必须继续使用Asp .NET Core 2.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>