Microsoft.NET.Sdk.Worker 与 API 项目兼容吗?
Is Microsoft.NET.Sdk.Worker compatible with an API project?
通过
创建了一个Visual StudioAPI项目
"新项目",
"ASP.NET 核心网络应用",
"ASP.NET 核心网站 API"
生成以...开头的项目文件
<Project Sdk="Microsoft.NET.Sdk.Web">
如果这个 API 需要一个很长的 运行 任务,那么似乎需要一个 BackgroundService
。
This document 表示以下是一个较长的 运行 服务应用程序的起点。
<Project Sdk="Microsoft.NET.Sdk.Worker">
Microsoft.NET.Sdk.Worker
与 API 项目兼容吗?如果兼容,如何将此项目信息添加到 API 项目?
Microsoft.NET.Sdk.Web
和 Microsoft.NET.Sdk.Worker
都是默认项目 SDK Microsoft.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,worker SDK,用于将使用默认主机的项目生成器,但不是 Web 项目。这个 worker SDK 现在基本上包含 web SDK 的一个子集,用于使用通用主机和默认主机构建器的项目。
worker SDK 包含的任何东西都不是 web SDK 的一部分(至少据我所知不是,如果是,那可能只是小事)。这也意味着您可以使用 worker SDK 执行的所有操作在 web SDK 中也应该同样有效。
至于一般的BackgroundService
或IHostedService
:这些是Microsoft.Extensions.Hosting
中通用主机附带的东西。虽然建议为这些使用 worker(或 web)SDK,但实施在技术上 不需要 它。尤其是,Web SDK 也完全支持这一点,来自 ASP.NET Core 3.0 或更高版本的 Web 主机实际上构建在托管服务之上。
因此,如果您正在构建 ASP.NET 核心应用程序,那么您已经在使用主机构建器的托管服务。如果您需要添加额外的托管服务或后台服务,您可以在虚拟主机之外注册这些服务,一切都会正常进行。
总而言之,在SDK特性方面,NET.Sdk
⊂NET.Sdk.Worker
⊂NET.Sdk.Web
。因此,如果您想将托管服务添加到您的 ASP.NET 核心 Web 项目,您可以直接这样做,但您不应该将您的 Web SDK“降级”为 worker SDK,因为那样您将错过 Web -您的 ASP.NET 核心应用程序可能需要的特定功能。
通过
创建了一个Visual StudioAPI项目"新项目",
"ASP.NET 核心网络应用",
"ASP.NET 核心网站 API"
生成以...开头的项目文件
<Project Sdk="Microsoft.NET.Sdk.Web">
如果这个 API 需要一个很长的 运行 任务,那么似乎需要一个 BackgroundService
。
This document 表示以下是一个较长的 运行 服务应用程序的起点。
<Project Sdk="Microsoft.NET.Sdk.Worker">
Microsoft.NET.Sdk.Worker
与 API 项目兼容吗?如果兼容,如何将此项目信息添加到 API 项目?
Microsoft.NET.Sdk.Web
和 Microsoft.NET.Sdk.Worker
都是默认项目 SDK Microsoft.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,worker SDK,用于将使用默认主机的项目生成器,但不是 Web 项目。这个 worker SDK 现在基本上包含 web SDK 的一个子集,用于使用通用主机和默认主机构建器的项目。
worker SDK 包含的任何东西都不是 web SDK 的一部分(至少据我所知不是,如果是,那可能只是小事)。这也意味着您可以使用 worker SDK 执行的所有操作在 web SDK 中也应该同样有效。
至于一般的BackgroundService
或IHostedService
:这些是Microsoft.Extensions.Hosting
中通用主机附带的东西。虽然建议为这些使用 worker(或 web)SDK,但实施在技术上 不需要 它。尤其是,Web SDK 也完全支持这一点,来自 ASP.NET Core 3.0 或更高版本的 Web 主机实际上构建在托管服务之上。
因此,如果您正在构建 ASP.NET 核心应用程序,那么您已经在使用主机构建器的托管服务。如果您需要添加额外的托管服务或后台服务,您可以在虚拟主机之外注册这些服务,一切都会正常进行。
总而言之,在SDK特性方面,NET.Sdk
⊂NET.Sdk.Worker
⊂NET.Sdk.Web
。因此,如果您想将托管服务添加到您的 ASP.NET 核心 Web 项目,您可以直接这样做,但您不应该将您的 Web SDK“降级”为 worker SDK,因为那样您将错过 Web -您的 ASP.NET 核心应用程序可能需要的特定功能。