.NET Core根据环境变量支持多个 appsettings.json配置文件
在项目开发的过程当中,开发环境、测试环境、生产环境的配置肯定是不一样的,单靠一个 appsettings.json,没法满足各种环境。所以就需要根据不同的环境,加载不同的配置文件。
环境变量
ASP.NET Core在应用启动时读取环境变量ASPNETCORE_ENVIRONMENT,ASPNETCORE_ENVIRONMENT可以设置任意值,但框架仅支持三个值:Development(开发),、Staging(分阶段), 和 Production(生产),分别对应项目中的appsettings.Development.json、appsettings.Production.json和appsettings.Staging.json。
我们新建项目时,只有appsettings.Development.json,另外两个则需要我们添加。
系统默认读取配置文件的顺序是:
开发环境
appsettings.Development.json -> appsettings.json
生产环境
appsettings.Production.json -> appsettings.json
没有Development和Production的时候默认读取 appsettings.json
开发调试时指定环境
开发调试时,默认指定Development环境,我们也可以自己指定
Docker 发布时指定环境
Docker 发布时默认指定生产环境,我们也可以自行指定
默认发布命令:
docker run -d -p 5001:80 --name myservice1 192.168.8.25:5000/myapi --ip=192.168.8.61 --port=5001
带环境变量发布命令:
docker run -d -p 5002:80 --name myservice2 -e ASPNETCORE_ENVIRONMENT=Staging 192.168.8.25:5000/myapi --ip=192.168.8.61 --port=5002
注: Docker run -e xxx=abc,-e 可以指定环境变量
我这里试了下,appsettings.Production.json 是连接到服务器consul,appsettings.Staging.json 连接到本地consul,测试成功。
查看myservice1 环境变量
docker inspect myservice1
查看myservice2 环境变量
docker inspect myservice2
web.config指定环境
若是在win环境发布,可以通过修改web.config的方式来实现,Core项目中默认是没有web.config文件的,但是发布后会生成一个web.config文件,我们可以通过添加节点来设置环境变量:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\WebCoreTest.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>