讲解 ASP.NET Core 对多种开发和生产环境的支持
在生产环境中为实时客户运行应用程序与在本地机器上开发应用程序时运行应用程序有很大不同。在生产中,您的应用程序托管在与您的计算机具有非常不同的配置和规格的服务器上。您的应用程序与之通信的各种服务(例如数据库或外部API)在生产中发生变化。
通过让应用程序知道它正在运行的环境,您可以改变应用程序的行为。ASP.NETCore可以轻松轻松地管理各种环境。您可以为不同的环境配置不同的配置设置,无需重新编译应用程序即可调整它们。这使您可以轻松更改环境。
管理应用程序的环境分为三个部分,识别环境,根据环境加载不同的配置设置,以及更改环境。
为了确定运行时环境,ASP.NETCore在调用ConfigureWebHostDefaults方法时使用名为DOTNET_ENVIRONMENT或ASPNETCORE_ENVIRONMENT的环境变量。第二个环境变量覆盖第一个环境变量。
如果应用程序在启动时没有找到ASPNETCORE_ENVIRONMENT变量,则它默认为生产环境。这意味着,除非您在部署机器上显式设置变量以进行开发,否则所有ASP.NETCore应用程序都以生产模式启动。
您还可以使用该launchSettings.json文件来设置托管环境。此文件位于Properties文件夹中,并定义用于运行应用程序的配置文件。这是一个典型launchSettings.json文件的示例。
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:17456", "sslPort": 44394 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "nhooo": { "commandName": "Project", "dotnetRunMessages": "true", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
由于ASP.NETCore应用程序作为控制台应用程序启动,因此当前托管环境会在启动时记录到控制台。
➜ nhooo dotnet run Building... info: Microsoft.Hosting.Lifetime[0] Now listening on: https://localhost:5001 info: Microsoft.Hosting.Lifetime[0] Now listening on: http://localhost: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: /nhooo
传递给该IWebHostEnvironment参数Configure()方法的启动类提供了一个名为辅助方法IsDevelopment(),IsStaging()等来轻松识别环境。它还有一个名为的方法IsEnvironment(envName),它接受一个字符串并在环境名称与该字符串匹配时返回。您可以使用它来识别任何自定义环境。
虽然您可以使用任何值来指定环境,但开箱即用的ASP.NETCore提供了三个值:
发展
分期
生产
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.NETCore会在启动过程的早期确定环境,甚至在设置配置之前。这允许您根据环境动态更改配置提供程序。