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

H2O*_*aCl 1 background-service asp.net-core

通过以下方式创建的 Visual Studio API 项目

“新项目”,

"ASP.NET Core Web 应用程序",

“ASP.NET Core Web API”

结果是一个以...开头的项目文件

<Project Sdk="Microsoft.NET.Sdk.Web">
Run Code Online (Sandbox Code Playgroud)

如果此 API 需要长时间运行的任务,则似乎BackgroundService需要 a。 本文档说明以下内容是长期运行的服务应用程序的起点。

<Project Sdk="Microsoft.NET.Sdk.Worker">
Run Code Online (Sandbox Code Playgroud)

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

pok*_*oke 7

双方Microsoft.NET.Sdk.WebMicrosoft.NET.Sdk.Worker都扩展为默认的项目SDKMicrosoft.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,即工作程序 SDK,用于将使用默认主机的项目builder 但不是网络项目。这个工作程序 SDK 现在基本上包含 Web SDK 的一个子集,用于使用通用主机和默认主机构建器的项目。

工作 SDK 包含的任何内容都不是 Web SDK 的一部分(至少据我所知不是这样,如果是,那可能只是小事)。这也意味着您可以使用工作程序 SDK 执行的所有操作也应该在 Web SDK 中以相同的方式工作。

至于BackgroundServiceIHostedService一般而言:这些是Microsoft.Extensions.Hosting. 虽然建议为这些使用工作程序(或网络)SDK,但实现在技术上并不需要它。特别是,Web SDK 也完全支持这一点,并且来自 ASP.NET Core 3.0 或更高版本的 Web 主机实际上构建在托管服务之上。

因此,如果您正在构建 ASP.NET Core 应用程序,则您已经在使用主机构建器的托管服务。如果您需要添加额外的托管或后台服务,您可以在 Web 主机之外注册这些服务,一切都会正常工作。

总而言之,就 SDK 功能而言,NET.Sdk? NET.Sdk.Worker? NET.Sdk.Web. 因此,如果您想将托管服务添加到您的 ASP.NET Core Web 项目,您可以直接这样做,但您不应该将您的 Web SDK“降级”为工作 SDK,因为那样您将错过特定于 Web 的服务ASP.NET Core 应用程序可能需要的功能。