ASP .NET CORE 根據環境變量支持多個 appsettings.json


  • 背景

在開發項目的過程當中,生產環境與調試環境的配置肯定是不一樣的。拿個最簡單的例子來說,比如連接字符串這種東西,調試環境肯定是不能連接生產數據庫的。在之前的話,這種情況只能說是你 COPY 兩個同名的配置文件來進行處理。然后你在本地就使用本地的配置,生產環境就使用生產環境的配置文件,十分麻煩。

而 ASP .NET CORE 支持利用環境變量來動態配置 JSON 文件,下面就來看一下吧。

  • 准備工作

首先在你的 ASP .NET CORE 項目當中添加幾個文件 appsettings.json、 appsettings.Development.json、appsettings.Production.json和appsettings.Staging.json,.Net Core默認支持這幾種環境配置文件,AppSettings部分的內容分別如下:

 
        
  "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 的值來切換不同環境。

可以看到目前我們處於 Development 也就是開發環境,就應該讀取 appsettings.Development.json 的文件數據了,同樣,將這里改為Production則會引用appsettings.Production.json的配置。

  注意:appsettings.json為基准配置,各appsettings.xxxx.json將以其為基礎替換數據,並非排除了appsettings.json后只用appsettings.xxxx.json的數據。最終結果是二者拼接起來的。即:我們在appsettings.xxxx.json中只放入與appsettings.json中有差異的數據即可,類似之前的web.config替換。

  • 不同 OS 的環境變量配置

  •  Windows

直接右鍵計算機手動添加環境變量。

  •  Linux

使用 export 命令直接進行環境變量設置。

export ASPNETCORE_ENVIRONMEN='Production'
  •  Docker

Docker 配置最為簡單,直接在啟動容器的時候加上 -e 參數即可,例如:

docker run -d -e ASPNETCORE_ENVIRONMEN=Production --name testContainer testImage
  • 使用Web.config統一配置

使用OS環境變量方式配置不是太靈活,如一個服務器有多個環境需要部署就麻煩了,所以個人推薦繼續使用web.config的方式改變環境設置。

站點下新建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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM