如何在库项目中使用ASP.NET Core 3.0类型来共享控制器、中间件等?

30

在ASP.NET Core 2.2之前的版本中,我们可以通过NuGet来创建用于共享控制器、中间件等功能的库项目。那么如何创建一个能够使用ASP.NET Core 3.0类型的库呢?

对于包含视图的项目,我们可以使用“Razor类库”(razorclasslib) 模板来创建。但如果只需要包含逻辑组件的库,应该如何创建呢?

1个回答

40

.NET Core 3.0应用程序可以引用一个或多个共享框架。ASP.NET Core是其中之一(其他包括基本的.NET Core共享框架和包含WinForms和WPF的Windows桌面共享框架)。

要从针对.NET Core 3.0(netcoreapp3.0而不是.NET Standard)的经典.NET Core库中引用ASP.NET Core,您可以使用csproj中的FrameworkReference引用该框架:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

在Visual Studio中打开时,此额外的框架引用将显示在解决方案资源管理器中的依赖项节点中:

enter image description here


2
是的,这很有效,而且很酷的是,如果你添加它并且只引用其中一两个东西,你可以构建一个修剪过的EXE/Package,它将仅选择所需的内容,不像显式的程序集引用。我只需要IWebHostEnvironment,而且额外的占用空间非常小。谢谢! - Rick Strahl
6
如果图书馆的目标是 .NET Standard 2.1,那会怎样? - user2163043
6
那么,您就不能使用asp.net core的API,需要将目标转向netcoreapp3.0。只有EF Core和Microsoft.Extensions这两个3.0版本的包可以在.NET Standard中使用。 - Martin Ullrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接