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

10
通过“新建项目”,“ASP.NET Core Web App”和“ASP.NET Core Web API”创建的Visual Studio API项目,会生成一个以...开头的项目文件。
<Project Sdk="Microsoft.NET.Sdk.Web">

如果这个API需要一个长时间运行的任务,那么很可能需要一个BackgroundService此文档指出以下是长时间运行服务应用程序的起点。
<Project Sdk="Microsoft.NET.Sdk.Worker">

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

1个回答

31

Microsoft.NET.Sdk.WebMicrosoft.NET.Sdk.Worker都是针对特定项目上下文的默认项目SDK Microsoft.NET.Sdk的扩展,添加了一些有用的默认值。

最初只有普通的SDK和Web SDK,后者添加了许多在默认ASP.NET Core模板中有意义的默认设置。其中一些显然是为Razor提供支持以及为Web特定的内容(例如wwwroot文件夹)提供支持。但是,还有一些默认项是由于默认WebHost在配置文件中设置的,例如appsettings.json以及Visual Studio中的用户密码和文件嵌套。

当使用ASP.NET Core 3.0创建通用主机时,这为非Web项目开启了主机和主机构建器模式的使用。但是,由于所有这些主机特定的默认项都包含在Web SDK中,而Web SDK也具有很多真正面向Web的内容,因此团队推出了新的SDK——Worker SDK,该SDK用于使用通用主机和默认主机构建器但不是Web项目的项目。现在,Worker SDK基本上包含Web SDK的子集,用于使用通用主机和默认主机构建器的项目。

据我所知,工作线程 SDK 包含的所有内容都是 Web SDK 的一部分(至少在我所知道的范围内,如果有什么不同,那也只是些微小的东西)。这也意味着你可以使用工作线程 SDK 所能做的一切,Web SDK 也同样支持。

至于 BackgroundService 或者 IHostedService:它们是随着泛型主机(Microsoft.Extensions.Hosting)提供的。虽然建议使用工作线程 SDK(或者 Web SDK)来实现它们,但从技术上讲并不需要。尤其是,Web SDK 完全支持这些,而 ASP.NET Core 3.0 或更高版本的 Web 主机实际上是构建在托管服务之上的。

所以,如果你正在构建一个 ASP.NET Core 应用程序,你已经在使用主机构建器进行托管服务了。如果你需要添加其他的托管或后台服务,你只需将它们注册到 Web 主机中即可,一切都会正常工作。

总之,在 SDK 功能方面,NET.SdkNET.Sdk.WorkerNET.Sdk.Web。因此,如果你想向 ASP.NET Core Web 项目添加托管服务,可以直接这样做,但是不应该将 Web SDK 降级为工作线程 SDK,因为那样你会错过你的 ASP.NET Core 应用程序可能需要的 Web 特定功能。


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