ASP.NET Core引入了对跨多个环境控制应用程序行为的改进支持,如Development,Staging和Production。环境变量用来指定应用程序正在运行的环境,允许应用程序可以进行适当的配置。

Development, Staging, Production

ASP.NET Core引用了一个特定的环境变量,ASPNETCORE_ENVIRONMENT来描述一个应用程序当前运行的环境。这个变量可以被设置成任何你喜欢的值,但按惯例有三个值:Development, Staging, 和 Production

当前的环境设置可以在应用程序中通过编程的方式来得到。另外,你也可以基于当前的应用程序环境在你的View视图里面使用环境Tag Helper来包含某些部分。

注:指定的环境名称不区分大小写,无论你把环境变量设置成Development或者development或者DEVELOPMENT,最终的结果将会是相同的。

Development

这应该是在开发一个应用程序的时候所设置的。在Visual Studio Code中,打开project.json可以查看到该设置。

 "env": {
    "ASPNETCORE_ENVIRONMENT": "Development"
}

Staging

按惯例,Staging环境是用于在部署到生产环境前进行最终测试的预生产环境。理想情况下,它的物理特征应该是生产环境的镜像,因此生产环境中可能出现的任何问题首先会发生在预演环境中。可以在这里解决它们而不会影响到用户。

Production

Production环境是应用程序被终端用户所使用的运行环境。这个环境应该最大限度的提高安全性,性能和应用程序的健壮性。生产环境不同于开发环境的一些通用的设置包括:

  • 启用缓存

  • 确保所有的客户端资源被打包,压缩和尽可能由CDN提供服务

  • 关闭诊断错误页面

  • 启用友好的错误页面

  • 启用生产日志和监控

最好避免在应用程序的多个部分分散对环境的检查。相反,推荐的方式是尽可能在应用程序的Startup类中进行这样的检查。

在运行时确定环境

IHostingEnvironment服务为使用的工作环境提供了核心抽象。该服务由ASP.NET宿主层提供,并且能够通过依赖注入注入到你的启动逻辑中。在Visual Studio中的ASP.NET Core网站模板使用了这种方式来加载特定环境的配置文件,并且自定义应用程序的错误处理设置。在这两种环境下,这种行为通过在IHostingEnvironment实例上调用EnvironmentName或者IsEnvironment来指定当前指定的环境来实现。

你可以使用下列代码在你的配置方法中设置特定环境的错误处理:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
}

如果应用程序运行在Development环境,那么它在Visual Studio中开启必要的运行时支持来使用浏览器链接(BrowserLink)功能,特定开发环境的错误页面和特定的数据库错误页面。否则,如果应用程序不是在开发环境中运行,配置一个标准的错误处理页面来显示响应中的任何未处理异常。

你可能需要在运行时确定需要向客户端发送哪些内容,例如,在开发环境中你通常提供一个非最小化的脚本和样式表,这么更便于调试。在生产环境和测试环境应当从CDN提供一个最小化的版本。你可以使用环境Tag Helper来做到这一点。

<environment names="Development">
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
          asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
          asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
    <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>

启动约定

ASP.NET Core支持一种基于约定的方法来根据当前的环境配置应用程序的启动。你也可以使用编程的方式控制你的应用程序行为。

当ASP.NET Core应用程序启动,Startup类将使用引导应用程序,加载其配置设置等。然而,如果一个类的命名存在Startup{EnvironmentName}(例如,StartupDevelopment),并且ASPNETCORE_ENVIRONMENT环境变量和它的名字相匹配,那么则会使用那个Startup类。

原文链接

Working with Multiple Environments

个人博客

我的个人博客