You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6中使用WebApplication.CreateBuilder()时如何排除托管启动程序集?

在.NET Core 6中排除托管启动程序集的正确方式

问题场景

我尝试在.NET Core 6中通过WebApplication.CreateBuilder(...)排除Microsoft.AspNetCore.Watch.BrowserRefresh托管启动程序集,最初写了如下代码:

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "Microsoft.AspNetCore.Watch.BrowserRefresh");

但运行时直接抛出异常:

托管启动程序集排除列表从""更改为"Microsoft.AspNetCore.Watch.BrowserRefresh"。不支持使用WebApplicationBuilder.WebHost更改主机配置,请改用WebApplication.CreateBuilder(WebApplicationOptions)。

查看WebApplicationOptions的定义后,发现它仅包含以下属性,完全没有涉及托管启动程序集的配置项:

public string[]? Args { get; init; }
public string? EnvironmentName { get; init; }
public string? ApplicationName { get; init; }
public string? ContentRootPath { get; init; }
public string? WebRootPath { get; init; }

我怀疑只要通过WebApplicationBuilder.WebHost修改主机配置就会触发这个错误,也试过找对应的命令行参数、HostingStartup相关属性,但都没找到合适的排除方式,目前纠结是不是要回退到Host.Create*Builder自行构建,但担心会对已完成的应用造成影响。

解决方案

不用回退到旧的构建方式,有几种更稳妥的方案:

方案1:通过环境变量配置

设置环境变量ASPNETCORE_HOSTINGSTARTUP_EXCLUDEASSEMBLIES,值为要排除的程序集名称:

ASPNETCORE_HOSTINGSTARTUP_EXCLUDEASSEMBLIES=Microsoft.AspNetCore.Watch.BrowserRefresh

方案2:通过配置文件配置

在appsettings.json(或对应环境的配置文件)中添加如下配置:

{
  "ASPNETCORE_HOSTINGSTARTUP_EXCLUDEASSEMBLIES": "Microsoft.AspNetCore.Watch.BrowserRefresh"
}

方案3:提前构建WebHostBuilder再创建WebApplicationBuilder

如果一定要在代码中硬编码配置,可以先创建并配置好WebHostBuilder,再传入WebApplication.CreateBuilder,这样就不会触发异常:

var webHostBuilder = WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "Microsoft.AspNetCore.Watch.BrowserRefresh");

var builder = WebApplication.CreateBuilder(webHostBuilder);

// 继续你的应用配置逻辑
var app = builder.Build();
// ...

说明

WebApplicationBuilder不允许在创建后修改WebHost的核心配置,所以必须在创建WebApplicationBuilder之前完成这类主机级别的配置,或者通过配置文件/环境变量这种外部方式设置,这样既符合.NET 6+的WebApplication模型设计,又不会破坏现有应用的结构。

内容的提问来源于stack exchange,提问作者Barak Gall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:42:10