环境变量作用:
可以让我们的程序在不同的EnvironmentName下运行不一样的代码。通常不同的环境,我们需要加载不一样的配置
这是都可以通过EnvironmentName来灵活指定.比如ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如开
发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件,
不仅如此,同一个Startup,我们可以指定不同的Configure{EnvironmentName}Services,Configure{EnvironmentName} 方法,系统会自动进行加载判断使用哪个
.NET CORE中获取环境变量:
很简单直接适用webHostEnvironment.EnvironmentName即可
public IActionResult Index([FromServices] ILogger<HomeController> logger, [FromServices] IWebHostEnvironment webHostEnvironment) { logger.LogInformation("EnvironmentName:" + webHostEnvironment.EnvironmentName); logger.LogInformation("----------------------"); return View(); }
环境标记帮助程序使用 IHostEnvironment.EnvironmentName 的值在元素中包含或排除标记:
可以做到不同的环境变量下显示不同的内容
<environment include="Development"> <div>The effective tag is: <environment include="Development"</div> </environment> <environment exclude="Development"> <div>The effective tag is: <environment exclude="Development"</div> </environment> <environment include="Staging,Development,Staging_2"> <div> The effective tag is: <environment include="Staging,Development,Staging_2" </div> </environment>
可以在使用命令运行的时候,接需要的配置,可以让环境变量不同:
可以做到不同的环境变量下显示不同的内容
比如这里我们配置了两个,可以在命令运行的时候指定使用不同的配置。
比如要使用Production这个配置就可以这样使用:
dotnet run --launch-profile "Production"
当然这种方式只适用于本地开发计算机上使用,也就是开发环境
开发环境还可以考虑适用修改这个设置来测试
生产环境:
通常,可以使用环境变量或平台设置来设置用于测试的特定环境。 如果未设置环境,默认值为 Production,这会禁用大多数调试功能。 设置环境的方法取决于操作系统
比如开发环境下,我们直接运行,或者切换到开发目录适用dotnet run运行输出的默认都是Development,这也符合开发环境下环境变量为Development的需求
如果我们运行的是发布版本,那么输出的就是Production
在windows,linux,mac,iis等设置环境变量的方法可以参考微软官方文档(其实通常情况下使用默认的值就行了,如果未设置环境,默认值为 Production)
比如windows下的全局设置
依次打开“控制面板”>“系统”>“高级系统设置”,再添加或编辑“ASPNETCORE_ENVIRONMENT”值
注意,测试的时候如果修改了还是输出默认的Production,你可以重新发布一次在试
当然也可以使用命令统一设置:
setx ASPNETCORE_ENVIRONMENT Staging /M
/M 开关指明,在系统一级设置环境变量。 如果未使用 /M 开关,就会为用户帐户设置环境变量。
根据环境变量在不同环境下去加载不同的配置
代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureAppConfiguration((context, config) => { //获取环境变量 string environmentName = context.HostingEnvironment.EnvironmentName; /*根据环境变量加载不同的配置文件,可以做到同一个项目不同环境下加载不同的配置文件 比如开发环境加载appsettings.Development.json 在生成环境就加载appsettings.Production.json */ config.AddConsul($"appsettings.{environmentName}.json", options => { options.ConsulConfigurationOptions = cco => { cco.Address = new Uri("http://127.0.0.1:8500"); }; //配置热更新 动态加载 options.ReloadOnChange = true; }); }); webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://*:9003"); });
根据环境变量在不同环境下去加载不同的Startup
代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureAppConfiguration((context, config) => { string environmentName = context.HostingEnvironment.EnvironmentName; if (environmentName == "Development") { webBuilder.UseStartup<Startup_Development>(); } if (environmentName == "Production") { webBuilder.UseStartup<Startup_Production>(); } }); //webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://*:9003"); });
微软官方关于环境变量的文档
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-6.0
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739