为何Visual Studio的Worker Service模板下IHostBuilder找不到ConfigureWebHostDefaults方法
解决方案
你遇到的报错核心原因是Worker Service模板默认使用的项目SDK不含ASP.NET Core相关程序集,按以下步骤操作即可解决:
- 修改项目根目录下的
.csproj文件,将首行的SDK声明替换为Web SDK:
把<Project Sdk="Microsoft.NET.Sdk">改为<Project Sdk="Microsoft.NET.Sdk.Web"> - 无需额外安装你之前尝试的零散NuGet包,Web SDK已经内置了
ConfigureWebHostDefaults所需的全部依赖,原来引用的Microsoft.Extensions.Hosting包也可以保留。 - 调整后的
CreateHostBuilder可以正常配置Web主机和Startup类,完整示例如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
你可以直接在Startup类中配置健康检查端点,示例代码如下:
public class Startup { public void ConfigureServices(IServiceCollection services) { // 注册健康检查服务 services.AddHealthChecks(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); app.UseEndpoints(endpoints => { // 暴露健康检查端点,Kubernetes可通过该路径检测服务状态 endpoints.MapHealthChecks("/health"); }); } }
修改完成后重新生成项目即可消除报错,Worker服务和Web健康检查端点可以同时正常运行。
内容的提问来源于stack exchange,提问作者Pine Code
相关产品推荐
相关产品推荐

