在开发项目的过程中,生产环境与调试环境的配置确定是不同的。拿个最简单的例子来讲,好比链接字符串这种东西,调试环境确定是不能链接生产数据库的。在以前的话,这种状况只能说是你 COPY 两个同名的配置文件来进行处理。而后你在本地就使用本地的配置,生产环境就使用生产环境的配置文件,十分麻烦。html
而 ASP .NET CORE 支持利用环境变量来动态配置 JSON 文件,下面就来看一下吧。linux
首先在你的 ASP .NET CORE 项目当中添加几个文件 appsettings.json、
appsettings.Development.json、appsettings.Production.json和appsettings.Staging.json,.Net Core默认支持这几种环境配置文件,AppSettings部分的内容分别以下:web
"AppSettings": {
"SystemName": "Basic Framework",
"Ver": "Dev"
}
"AppSettings": {
"SystemName": "Basic Framework",
"Ver": "Dev"
}
{
"AppSettings": {
"SystemName": "Basic Framework",
"Ver": "Prd"
}
}
{
"AppSettings": {
"SystemName": "Basic Framework",
"Ver": "Qas"
}
}
在项目调试的时候,咱们能够经过右键项目属性,跳转到调试能够看到一个环境变量的设定,经过更改 ASPNETCORE_ENVIRONMENT
的值来切换不一样环境。docker
能够看到目前咱们处于 Development
也就是开发环境,就应该读取 appsettings.Development.json
的文件数据了,一样,将这里改成Production则会引用appsettings.Production.json的配置。shell
注意:appsettings.json为基准配置,各appsettings.xxxx.json将以其为基础替换数据,并不是排除了appsettings.json后只用appsettings.xxxx.json的数据。最终结果是两者拼接起来的。即:咱们在appsettings.xxxx.json中只放入与appsettings.json中有差别的数据便可,相似以前的web.config替换。数据库
直接右键计算机手动添加环境变量。json
使用 export 命令直接进行环境变量设置。windows
export ASPNETCORE_ENVIRONMEN='Production'
Docker 配置最为简单,直接在启动容器的时候加上 -e
参数便可,例如:服务器
docker run -d -e ASPNETCORE_ENVIRONMEN=Production --name testContainer testImage
使用Web.config统一配置
使用OS环境变量方式配置不是太灵活,如一个服务器有多个环境须要部署就麻烦了,因此我的推荐继续使用web.config的方式改变环境设置。app
站点下新建web.config:
<?xml version="1.0"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> </handlers> <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> <!--<environmentVariable name="CONFIG_DIR" value="f:\application_config" />--> </environmentVariables> </aspNetCore> <!--<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />--> </system.webServer> </configuration>
其中environmentVariable 指定了具体的环境,在服务器上直接修改web.config便可切换引用的appsettings.XXXX.json文件。
注意,本机开发时,仍是launchSettings.json中的值,web.config的值并不会起效。
参考:https://www.cnblogs.com/myzony/p/9418858.html
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments?view=aspnetcore-2.1
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.1