《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置
一、概述
程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个设计依旧前后矛盾,因为没有考虑好非Web 和Web区分),然后交由IWebHostEnvironment,对于ASP.NET Core环境而言,同样会存储在
IWebHostEnvironment.EnvironmentName,ASP.NET Core框架自身提供Development、Staging、Production三种状态作为EnvironmentName的值,
public interface IWebHostEnvironment : Microsoft.Extensions.Hosting.IHostEnvironment
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
}
}
二、开发建议
建议为不同的环境定义不同的Startup类,让ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如
开发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件
Program.cs中对于Startup的加载代码需要采用程序集的方式进行加载.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
webBuilder.UseStartup(assemblyName);
});
}
三、设定IWebHostEnvironment.EnvironmentName
1.开发阶段,我们可以通过项目的 Properties\launchSettings.json 进行设置
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:63327",
"sslPort": 44365
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"LearnAspCore": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
}
使用 dotnet run 启动应用时:
如果可用,读取 launchSettings.json 。 launchSettings.json 中的 environmentVariables 设置会替代环境变量 。
此时显示承载环境。
交互示例:
PS C:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.
2.VSCode
使用 Visual Studio Code 时,还可以在 .vscode/launch.json 文件中设置环境变量 。 以下示例将环境设置为 Development
:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
]
}
在没有 launchSettings.json 文件的 Development 环境中启动应用时,可以使用环境变量设置环境或者将命令行来启动
3.如何设置环境变量
1) Windows下当前窗口下有效的方式
a.当前cmd窗口下有效
set ASPNETCORE_ENVIRONMENT=Development //通过set ASPNETCORE_ENVIRONMENT 查看
b.当前powershell下有效
$Env:ASPNETCORE_ENVIRONMENT = "Development"
2) Windows全局设置的方式
a.“控制面板” >“系统” >“高级系统设置进行设置环境变量
b.cmd命令
setx ASPNETCORE_ENVIRONMENT Development /M // /M表示是否是整台机器,如果没有表示当前用户
c.powershell
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")
Machine 选项值指明,在系统一级设置环境变量。 如果将选项值更改为 User,就会为用户帐户设置环境变量。
3)类Unix系的设置方式
export ASPNETCORE_ENVIRONMENT=Development
如果要全局生效,请加到相应配置文件中,如下Centos的配置方式
修改/etc/profile文件,此文件是所有用户公用文件,修改可以使环境变量对所有用户生效。 如果要当前用户,则修改~/.bash_profile 在文件末尾加上如下两行代码 export ASPNETCORE_ENVIRONMENT=Development 最后:执行 命令 source /etc/profile
使其修改生效,执行完可通过 echo $ASPNETCORE_ENVIRONMENT=Development
命令查看是否添加成功。
4)其他设置方式
发布后的程序默认是Production模式的,如果设置了环境变量,就以环境变量为准;我们还可以通过以下方式在代码中强制指定运行环境是什么.
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
除此之外,.NET Core还可以在IIS ,IIS程序池,Azure中对EnvironmentName进行设置
四、设置了EnvironmentName为了啥
简而言之,可以让我们的程序在不同的EnvironmentName下运行不一样的代码。通常不同的环境,我们需要加载不一样的配置,
这是都可以通过EnvironmentName来灵活指定.另外有一些额外知识,如第二段提到那样,ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如开
发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件,
不仅如此,同一个Startup,我们可以指定不同的Configure{EnvironmentName}Services,Configure{EnvironmentName} 方法,系统会自动进行加载判断使用哪个
Configure,ConfigureServices
《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置的更多相关文章
- 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!
写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...
- 《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)
一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { ...
- 《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项
1.配置文件的相关闲话 Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级 命令行>环境变量 ...
- 《ASP.NET Core 高性能系列》静态文件中间件
一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...
- 《ASP.NET Core 高性能系列》关于.NET Core的部署方式
概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET ...
- 《ASP.NET Core 高性能系列》Span<T>和Memory<T>
一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbit ...
- 《ASP.NET Core 高性能系列》关于性能的闲聊
一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二. ...
- Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持
Jexus 是一款运行于 Linux 平台,以支持 ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...
- 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之三 —— 配置
==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...
随机推荐
- java之斗地主
hashmap集合+ArrayList集合+Collections集合工具类shuffle()和sort()hashmap中get(key).put(key/value)Arraylist中的add( ...
- 菜鸟学习Fabric源码学习 — Endorser背书节点
Fabric 1.4 源码分析 Endorser背书节点 本文档主要介绍fabric背书节点的主要功能及其实现. 1. 简介 Endorser节点是peer节点所扮演的一种角色,在peer启动时会创建 ...
- Centos7 编译安装PHP7
Centos7 编译安装PHP7 编译安装的方式可以让组件等设置更加合理,但需要你对PHP的代码及各种配置非常的熟悉,以下为大致的安装流程,大家可以参考 1.下载编译工具 yum groupinsta ...
- 11 个最佳的 Python 编译器和解释器
原作:Archie Mistry 翻译:豌豆花下猫@Python猫 原文:https://morioh.com/p/765b19f066a4 Python 是一门对初学者友好的编程语言,是一种多用途的 ...
- C#反射与特性(七):自定义特性以及应用
目录 1,属性字段的赋值和读值 2,自定义特性和特性查找 2.1 特性规范和自定义特性 2.2 检索特性 3,设计一个数据验证工具 3.1 定义抽象验证特性类 3.2 实现多个自定义验证特性 3.3 ...
- 构造函数以及关键词this
Java中所有类都有构造方法,用来进行该类对象的初始化,构造方法也有名称,参数和方法体以及访问权限的设定. 1.构造方法的完整定义格式如下: [public|protected|private]< ...
- MapGIS注记文字无损转入ArcGIS软件
在GIS软件中,注释是一种十分特殊的对象,虽然各类软件都支持注释,但它却不属于GIS的基本对象.因此通常的格式转换软件,都不对注释对象做特别的支持,我们最常见的Shape文件格式就只有点.线.面要素, ...
- Java 利用Map集合计算一个字符串中每个字符出现的次数
步骤分析 1.给出一串字符串,字符串中可以包含字母.数字.符号等等. 2.创建一个Map集合,key是字符串中的字符,value是字符的个数. 3.遍历字符串,获取每一个字符. 5.使用获取到的字符, ...
- 查看JVM参数
如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少? jps jinfo jvm的参数类型: 1.标配参数:java -version ,java -help , jav ...
- 「2.0」一个人开发一个App,小程序从0到1,文件剖析
不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...