解释 ASP.NET Core 如何支持开发和生产环境
在生产环境中为实际用户运行应用程序与在本地机器上开发时运行应用程序非常不同。在生产环境中,您的应用程序托管在服务器上,该服务器的配置和规格与您的计算机大相径庭。您的应用程序与之交互的各种服务(例如数据库或外部 API)在生产环境中也会发生变化。
通过让应用程序知道它正在运行的环境,您可以改变应用程序的行为。ASP.NET Core 使管理各种环境变得轻而易举。您可以为不同的环境配置不同的配置设置,并进行调整而无需重新编译应用程序。这使您可以轻松更改环境。
管理应用程序环境包括三个部分:识别环境、根据环境加载不同的配置设置以及更改环境。
为了确定运行时环境,当调用 ConfigureWebHostDefaults 方法时,ASP.NET Core 使用名为 DOTNET_ENVIRONMENT 或 ASPNETCORE_ENVIRONMENT 的环境变量。第二个环境变量会覆盖第一个环境变量。
如果应用程序在启动时找不到 ASPNETCORE_ENVIRONMENT 变量,则默认为生产环境。这意味着,除非您在部署机器上明确将变量设置为开发环境,否则所有 ASP.NET Core 应用程序都将以生产模式启动。
您还可以使用 launchSettings.json 文件来设置托管环境。此文件位于 Properties 文件夹中,并定义了运行应用程序的配置文件。这是一个典型的 launchSettings.json 文件示例。
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "https://127.0.0.1:17456", "sslPort": 44394 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "TutorialsPoint": { "commandName": "Project", "dotnetRunMessages": "true", "launchBrowser": true, "applicationUrl": "https://127.0.0.1:5001;https://127.0.0.1:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
由于 ASP.NET Core 应用程序作为控制台应用程序启动,因此当前托管环境会在启动时记录到控制台中。
➜ TutorialsPoint dotnet run Building... info: Microsoft.Hosting.Lifetime[0] Now listening on: https://127.0.0.1:5001 info: Microsoft.Hosting.Lifetime[0] Now listening on: https://127.0.0.1:5000 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /TutorialsPoint
传递给 Startup 类中 Configure() 方法的 IWebHostEnvironment 参数提供名为 IsDevelopment()、IsStaging() 等的辅助方法,以便轻松识别环境。它还有一个名为 IsEnvironment(envName) 的方法,该方法接受一个字符串并返回环境名称是否与该字符串匹配。您可以使用它来识别任何自定义环境。
虽然您可以使用任何值来指定环境,但 ASP.NET Core 原生提供三个值:
- 开发
- 过渡
- 生产
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ if (env.IsDevelopment()){ app.UseDeveloperExceptionPage(); } if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2")){ app.UseExceptionHandler("/Error"); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints =>{ endpoints.MapRazorPages(); }); }
ASP.NET Core 在启动过程的早期确定环境,甚至在设置配置之前。这允许您根据环境动态更改配置提供程序。