ASP.NET Core Program.cs 文件
ASP.NET Core web 应用程序实际上是一个控制台项目,它从 Program 类中的入口点 public static void Main() 开始执行,在那里我们可以为 web 应用程序创建主机。
在 ASP.NET Core 3.0 中创建主机:
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;namespace MyFirstCoreWebApp{public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}}
如上所述,Main() 方法调用方法表达式 CreateHostBuilder() 以使用预先配置的默认值构建 web 主机。CreateHostBuilder 表达式也可以写成返回 IWebHost 的方法,如下所示。
public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args){return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}
让我们来理解一下步骤。
Host 是一个静态类,可用于创建具有预配置默认值的 IHostBuilder 和 IWebHostBuilder 的实例。CreateDefaultBuilder() 方法使用预先配置的默认值创建 WebHostBuilder 的新实例。在内部,它配置 Kestrel、IISIntegration 和其他配置。以下是 CreateDefaultBuilder() 方法。
public static IWebHostBuilder CreateDefaultBuilder(string[] args){var builder = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment;config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);if (env.IsDevelopment()){var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));if (appAssembly != null){config.AddUserSecrets(appAssembly, optional: true);}}config.AddEnvironmentVariables();if (args != null){config.AddCommandLine(args);}}).ConfigureLogging((hostingContext, logging) =>{logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));logging.AddConsole();logging.AddDebug();}).UseIISIntegration().UseDefaultServiceProvider((context, options) =>{options.ValidateScopes = context.HostingEnvironment.IsDevelopment();});return builder;}
如上所述,CreateDefaultBuilder 方法创建 WebHostBuilder 的实例,并设置 Kestrel、内容根目录和集成 IIS 。
Kestrel 是 ASP.NET Core 的开源跨平台 web 服务器。它被设计为在代理之后使用,因为它还没有成熟到可以作为一个完整的 web 服务器。
它还调用 ConfigureAppConfiguration() 从 appsettings.json 文件、环境变量和 user secrets 加载配置。ConfigureLogging() 方法将日志记录设置到控制台和调试窗口。
下一章,我们来学习 Startup.cs 文件。