您的位置:首页 > 其它

Working with multiple environments

2017-03-06 11:47 197 查看

ASP.NET Core引入了对多个环境(例如开发,暂存和生产环境)的支持。 可以用环境变量来指示应用程序正在运行的环境,从而让app来做相应的配置。


Development, Staging, Production

ASP.NET Core引用特定的环境变量ASPNETCORE_ENVIRONMENT来描述app当前正在运行的环境。此变量可以设置为任何您喜欢的值,但按照惯例有三个值:开发,暂存和生产。 您将在ASP.NET Core随附的示例和模板中找到这些值如何使用。


Note:

在Windows和macOS上,指定的环境名称不区分大小写。 无论是将变量设置为Development还是development或DEVELOPMENT,结果都是一样的。 但是,默认情况下,Linux是区分大小写的操作系统。 环境变量,文件名和设置应该要以区分大小写的标准来设定。


Development

对于visual studio 2017的app来说,环境变量设置在Properties文件夹中的launchSettings.json文件。

它可以配置多个启动模式,比如让IIS Express运行在Staging模式下:

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express (Staging)": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
}
}
}


Note:

对项目配置文件或launchSettings.json直接执行的更改可能不会生效,直到重新启动Web服务器



Warning:

存储在launchSettings.json中的环境变量不以任何方式保护,并且如果您在此文件中使用环境变量,它将是项目的源代码存储库的一部分。 所以切勿在此文件中存储凭据或其他机密数据。 如果您需要一个地方来存储此类数据,请使用Secret Manager工具。


Staging

按照惯例,暂存环境是用于在部署到生产之前的最终测试的预生产环境。 所以我们应当尽量让其物理特性应与生产的相对应,使得生产中可能出现的任何问题,首先发生在暂存环境中,在那里它们可以被修复而不影响用户。

Production

生产环境是app的线上版本,由最终用户使用时运行的环境。 应该通过正确的配置,最大限度地提高此环境的安全性,性能和应用程序鲁棒性。 生产环境可能具有的不同于开发的一些常见设置包括:

打开缓存

确保所有客户端资源都打包,最小化,并尽可能从CDN提供

关闭诊断ErrorPages

打开友好的错误页面

启用生产日志记录和监视(例如,Application Insights)

这绝不是一个完整的列表。

另外推荐在可能的情况下仅在应用程序的Startup类中执行环境检查,避免在其他地方多次进行重复检查。

如何确定当前Web运行的环境

在运行dotnet run之后,console会输出:

Hosting environment: Production
Content root path: /app
Now listening on: http://*:5000 Application started. Press Ctrl+C to shut down.

Hosting environment指定了当前运行的环境

Setting the environment

windows:

setx ASPNETCORE_ENVIRONMENT "Development"

如果不生效,则直接在windows的环境变量中设置:计算机->属性->高级->环境变量

Linux:

export command

Determining the environment at runtime

IHostingEnvironment服务提供了使用环境的核心抽象。 此服务由ASP.NET托管层提供,可以通过依赖注入注入到启动逻辑中。 Visual Studio中的ASP.NET Core网站模板使用此方法加载特定于环境的配置文件(如果存在)并自定义应用程序的错误处理设置。 在这两种情况下,通过在传递到相应方法中的IHostingEnvironment实例和调用EnvironmentName或IsEnvironment来引用当前指定的环境来实现此行为。


Note:

如果需要检查应用程序是否在特定环境中运行,请使用env.IsEnvironment(“environmentname”),因为它将正确忽略大小写(而不是检查env.EnvironmentName ==“Development”)。


例如,您可以在Configure方法中使用以下代码来设置特定于环境的错误处理:

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

如果应用程序在开发环境中运行,那么它将启用在Visual Studio中使用“BrowserLink”功能所必需的运行时支持,特定于开发的错误页面(通常不应在生产环境中运行)和特殊的数据库错误页面(提供了一种应用迁移的方法,因此应该仅在开发中使用)。 否则,如果应用程序未在开发环境中运行,则会将标准错误处理页面配置为显示以响应任何未处理的异常。

您可能需要确定在运行时将哪些内容发送到客户端,具体取决于当前环境。 例如,在开发环境中,通常提供非最小化的javscript和style sheets,因为这样方便调试。 生产和测试环境应部署最小化版本,通常来自CDN。 您可以使用环境标记助手执行此操作。 如果当前环境与使用names属性指定的环境之一匹配,则Environment标记帮助器将仅呈现其中描述的内容。

<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>

To get started with using tag helpers in your application see Introduction to Tag Helpers(https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/intro)

Startup conventions

ASP.NET Core支持基于约定的方法来配置app基于当前环境来启动。 您还可以通过编程方式控制app的行为,根据它所在的环境,允许您创建和管理自己的约定。

当ASP.NET Core应用程序启动时,启动类用于引导应用程序,加载其配置设置等(了解有关ASP.NET启动的更多信息,https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/startup)。 但是,如果存在一个名为Startup {EnvironmentName}(例如StartupDevelopment)的类,并且ASPNETCORE_ENVIRONMENT环境变量匹配该名称,那么将使用该Startup类。 因此,您可以将Startup配置为开发环境调用,但有一个单独的StartupProduction类,当app在生产环境中运行时使用。 或相反亦然。


Note

Calling WebHostBuilder.UseStartup


除了基于当前环境使用完全独立的Startup类之外,还可以调整应用程序在启动类中的配置方式。 Configure()和ConfigureServices()方法支持类似于Startup类本身的特定于环境的版本,形式为Configure {EnvironmentName}()和Configure {EnvironmentName} Services()。 如果定义一个方法ConfigureDevelopment(),当环境设置为开发时,它将被调用而不是Configure()。 同样,在同一环境中将调用ConfigureDevelopmentServices()而不是ConfigureServices()。

Summary

ASP.NET Core提供了许多功能和约定,允许开发人员轻松控制他们的应用程序在不同环境中的行为。 当将应用程序从开发发布到临时发布到生产时,适当设置环境变量,根据需要优化应用程序的配置来进行调试,测试或生产使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: