程序启动时Host捕获到环境相关数据,而后交由IEnvironment(传说要做废,可是以为这个设计依旧先后矛盾,由于没有考虑好非Web 和Web区分),而后交由IWebHostEnvironment,对于ASP.NET Core环境而言,一样会存储在web
IWebHostEnvironment.EnvironmentName,ASP.NET Core框架自身提供Development、Staging、Production三种状态做为EnvironmentName的值,shell
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}文件,例如json
开发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件windows
Program.cs中对于Startup的加载代码须要采用程序集的方式进行加载.bash
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); }); }
1.开发阶段,咱们能够经过项目的 Properties\launchSettings.json 进行设置app
{
"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 设置会替代环境变量 。
此时显示承载环境。框架
交互示例:ui
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.VSCodespa
使用 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来灵活指定.另外有一些额外知识,如第二段提到那样,ASP.NET Core根据自身环境的不一样,加载不一样的Startup{EnvironmentName}文件,例如开
发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件,
不只如此,同一个Startup,咱们能够指定不一样的Configure{EnvironmentName}Services,Configure{EnvironmentName} 方法,系统会自动进行加载判断使用哪一个
Configure,ConfigureServices