Working with multiple environments
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() overrides configuration sections.
除了基于当前环境使用完全独立的Startup类之外,还可以调整应用程序在启动类中的配置方式。 Configure()和ConfigureServices()方法支持类似于Startup类本身的特定于环境的版本,形式为Configure {EnvironmentName}()和Configure {EnvironmentName} Services()。 如果定义一个方法ConfigureDevelopment(),当环境设置为开发时,它将被调用而不是Configure()。 同样,在同一环境中将调用ConfigureDevelopmentServices()而不是ConfigureServices()。
Summary
ASP.NET Core提供了许多功能和约定,允许开发人员轻松控制他们的应用程序在不同环境中的行为。 当将应用程序从开发发布到临时发布到生产时,适当设置环境变量,根据需要优化应用程序的配置来进行调试,测试或生产使用。
Working with multiple environments的更多相关文章
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
- ASP.NET Core 介绍
原文:Introduction to ASP.NET Core 作者:Daniel Roth.Rick Anderson.Shaun Luttin 翻译:江振宇(Kerry Jiang) 校对:许登洋 ...
- ASP.NET Core 中文文档 第三章 原理(1)应用程序启动
原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...
- ASP.NET Core 中文文档 第三章 原理(2)中间件
原文:Middleware 作者:Steve Smith.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:许登洋(Seay) 章节: 什么是中间件 用 IApplicationBu ...
- ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作
原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...
- 000.Introduction to ASP.NET Core--【Asp.net core 介绍】
Introduction to ASP.NET Core Asp.net core 介绍 270 of 282 people found this helpful By Daniel Roth, Ri ...
- [译]ASP.NET 5 Configuration
原文:https://docs.asp.net/en/latest/fundamentals/configuration.html ASP.NET 5支持多种配置选项. 应用的配置文件可以是JSON, ...
- 《Continuous Integration》读书笔记
Trigger a Build whenever a change occurs. it can help us reduce assumptions on a projecvt by rebuild ...
- Learning WCF Chapter1 Creating a New Service from Scratch
You’re about to be introduced to the WCF service. This lab isn’t your typical “Hello World”—it’s “He ...
随机推荐
- 数据库-SQL语法:LEFT JOIN
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行.(补充:left join是一对多的关系,表里所有符合条件的记 ...
- nyoj-1103-区域赛系列一多边形划分
http://acm.nyist.net/JudgeOnline/problem.php?pid=1103 区域赛系列一多边形划分 时间限制:1000 ms | 内存限制:65535 KB 难度: ...
- python之文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)的作用
'r':只读.该文件必须已存在. 'r+':可读可写.该文件必须已存在,写为追加在文件内容末尾. 'rb':表示以二进制方式读取文件.该文件必须已存在. 'w':只写.打开即默认创建一个新文件,如果文 ...
- 分享一个Delphi跨平台Http库的封装,一个Delphi跨平台TCP库的封装
{ 单元名:跨平台的TCP客户端库封装 作者:5bug 网站:http://www.5bug.wang } unit uCPTcpClient; interface uses System.Class ...
- shell脚本,按空格开始60秒的倒计时。
[root@localhost wyb]# cat space.sh #!/bin/bash #按空格开始60秒的倒计时#-n表示接受字符的数量,1表示只接受一个字符 a() { - ` do ec ...
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余 package com.swift; import java.awt.BorderLayout; import java.awt.Color; ...
- sublime点击预览未起作用?教你如何设置支持浏览器预览
我用的text3版,其他版本未试,但应该也有效. 安了个view in browser插件,然而点击预览未起作用. 搜解决方法,发现了另一个插件,sidebar enhancements,设置快捷键预 ...
- centos7 安装rabbitmq rabbitmq-c以及amqp扩展 详细篇
自己鼓捣了一晚上总算整明白了,有几个坑分享给小伙伴,希望能帮到你 前期准备 安装erlang 下载rpm包地址:https://github.com/rabbitmq/erlang-rpm (注意er ...
- php redis通用类
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- 树形 dp
// ACM训练联盟周赛 C. Teemo's tree problem There is an apple tree in Teemo's yard. It contains n nodes ...