在開發項目的過程中,生產環境與調試環境的配置確定是不同的。拿個最簡單的例子來講,好比鏈接字符串這種東西,調試環境確定是不能鏈接生產數據庫的。在以前的話,這種狀況只能說是你 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