Microsoft.NET.Sdk.Worker是否与API项目兼容



通过创建的Visual Studio API项目

"新项目";,

"ASP.NET核心Web应用程序";,

"ASP.NET核心Web API";

导致项目文件以…开头。。。

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

如果这个API需要一个长时间运行的任务,那么似乎需要一个BackgroundService。本文档指出,以下内容是长期运行的服务应用程序的起点。

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

Microsoft.NET.Sdk.Worker是否与API项目兼容?如果兼容,如何将此项目信息添加到API项目?

Microsoft.NET.Sdk.WebMicrosoft.NET.Sdk.Worker都是默认项目SDKMicrosoft.NET.Sdk的扩展,它们添加了在这些项目上下文中有用的某些默认值。

最初,只有普通的SDK和web SDK,它们添加了许多默认的东西,这些东西对默认的ASP.NET核心模板来说是有意义的。其中一部分显然是对Razor的支持和对特定于web的东西(如wwwroot文件夹(的支持。但也有一些默认值被引入,因为默认WebHost使用appsettings.json等配置文件设置了什么,但也支持用户机密或Visual Studio中的文件嵌套。

当通用主机与ASP.NET Core 3.0一起发明时,这为非web项目打开了主机和主机生成器模式。但是,由于所有这些特定于主机的默认值都是web SDK的一部分,而web SDK也有很多真正特定于web的东西,因此该团队提出了一个新的SDK,即worker SDK,用于使用默认主机生成器但不是web项目的项目。这个worker SDK现在基本上包含web SDK的一个子集,用于使用通用主机和默认主机生成器的项目。

worker SDK包含的任何内容都不是web SDK的一部分(至少据我所知不是,如果是,那可能只是一些小事情(。这也意味着,使用worker SDK所能做的一切都应该在web SDK中以相同的方式工作。

至于BackgroundServiceIHostedService:这些都是Microsoft.Extensions.Hosting中通用主机附带的东西。虽然建议使用worker(或web(SDK进行这些操作,但从技术上讲,实现不需要。特别是,web SDK也完全支持这一点,ASP.NET Core 3.0或更高版本的web主机实际上是在托管服务之上构建的。

因此,如果您正在构建ASP.NET Core应用程序,那么您已经在主机生成器中使用了托管服务。如果你需要添加额外的托管或后台服务,你可以在网络主机之外注册这些服务,一切都会很好。

综上所述,就SDK的特性而言,NET.SdkNET.Sdk.Worker\8834NET.Sdk.Web。因此,如果您想将托管服务添加到ASP.NET Core web项目中,您可以直接添加,但不应将web SDK"降级"为工作SDK,因为这样您将失去ASP.NET Core应用程序可能需要的特定于web的功能。

最新更新