C#-ASP.NET Core專案在dotnet publish時自動切換不同環境web.config

因為每天都要將ASP.NET Core專案包到6個環境,

因此如果能根據不同環境切換不同web.config,就可以省去不少人工介入。


找到這個連結,其中我用的是「環境」設定方式的web.config:

https://learn.microsoft.com/zh-tw/aspnet/core/host-and-deploy/iis/transform-webconfig?view=aspnetcore-9.0&source=recommendations#environment

以下舉例怎麼設定:

今天在productionA的環境,需要在web.config中加一個只有該環境需要的設定,

step 1: 我會在原本的ASP.NET Core專案中,除了通用的web.config,在相同位置再新增「web.productionA.config」,這個檔案需用XDT語法新增需要的設定,這邊舉例重新導向(然後也會加上環境變數)


web.productionA.config內容可以是:


<?xml version="1.0" encoding="utf-8"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <system.webServer>

    <aspNetCore>

      <!-- 加入環境變數 -->

      <environmentVariables xdt:Transform="Insert">

        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="ProductionA" />

      </environmentVariables>

    </aspNetCore>

    <httpErrors xdt:Transform="InsertIfMissing">

<remove statusCode="403" subStatusCode="-1" />

<error statusCode="403" prefixLanguageFilePath="" path="https://abc.com" responseMode="Redirect" />

    </httpErrors>

  </system.webServer>

</configuration>


step 2: 然後在包版時,我是使用:直接從命令列指定,透過命令列傳遞 EnvironmentName,例如:

dotnet publish --configuration Release /p:EnvironmentName=ProductionA


這樣最後的web.config內容會是:web.config + web.productionA.config

web.config可以寫上每個環境共用的設定,個別環境的web.config寫上該環境需要的設定就好

然後可以有n個不同環境的web.config


是不是很方便呢?

留言

熱門文章