WebHostBuilder、IWebHost 和 WebHost 已过时

WebHostBuilderIWebHost并且 WebHost 已在 .NET 10 中标记为已过时。 WebHostBuilder 已替换为 HostBuilder ASP.NET Core 3.0 中的(泛型主机),并在 WebApplicationBuilder ASP.NET Core 6.0 中引入。 这些较新的替代方案是未来投资将发生的地方。

已引入的版本

.NET 10 RC 1

以前的行为

以前,可以使用 WebHostBuilder 该主机来配置和生成 Web 主机,而无需任何编译时警告。

新行为

从 .NET 10 开始,使用 WebHostBuilder 生成带有诊断 ID ASPDEPR004的编译器警告:

警告ASPDEPR004:WebHostBuilder 已弃用,支持 HostBuilder 和 WebApplicationBuilder。 有关详细信息,请访问 https://aka.ms/aspnet/deprecate/004

使用 IWebHostWebHost 生成带有诊断 ID ASPDEPR008的编译器警告:

警告ASPDEPR008:WebHost 已过时。 请改用 HostBuilder 或 WebApplicationBuilder。 有关详细信息,请访问 https://aka.ms/aspnet/deprecate/008

破坏性变更的类型

此更改可能会影响 源兼容性

更改原因

HostBuilderWebApplication 具有所有特征 WebHostBuilder ,并且是未来投资的重点。 WebHostBuilder 已替换为 ASP.NET Core 3.0 中的泛型主机,ASP.NET Core 6.0 中引入了最少的 API WebApplicationBuilder 。 这些较新的托管模型可更好地与 .NET 生态系统集成,并推荐用于新应用程序的方法。

WebHostBuilder任一迁移到或HostBuilderWebApplication

  • 对于需要完整托管功能的应用程序,请迁移到 HostBuilder

    Before:

    var hostBuilder = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup()
        .UseKestrel();
    // Test code might use TestServer:
    var testServer = new TestServer(hostBuilder);
    

    After:

    using var host = new HostBuilder()
        .ConfigureWebHost(webHostBuilder =>
        {
            webHostBuilder
                .UseTestServer() // If using TestServer.
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup()
                .UseKestrel();
        })
        .Build();
    await host.StartAsync();
    
    var testServer = host.GetTestServer();
    
  • 对于新应用程序,尤其是那些使用最少 API 的应用程序,请迁移到 WebApplicationBuilder

受影响的 API

另请参阅