Visual Studio C# 多環境設定 Web.config

2023-07-11 12:00:32

開始以為像SpringBoot 那樣,執行時也行效的,結果發現只對釋出生效,VS裡執行時不生效,湊活著用。
.Net Core appsettings.json 改進了

Visual Studio 為多環境設定 Web.config
不同的環境,存在不同的設定,如:資料庫連線字串,通過多設定,方便做環境切換,設定的修改

<!--最簡單,最麻煩的做法-->
<configuration>
  <appSettings>

    <!--正式-->
    <!--<add key="DbConnection" value="Data Source=10.176.1.2;Initial Catalog=vipsoft;User ID=sa;Password=....;" />-->
    <!--測試-->
    <!--<add key="DbConnection" value="Data Source=172.16.0.1;Initial Catalog=vipsoft;User ID=sa;Password=123456;" />-->
    <!--開發-->
    <add key="DbConnection" value="Data Source=172.16.0.2;Initial Catalog=vipsoft;User ID=sa;Password=666666;" />

  </appSettings>
</configuration>

好的做法。

新增解決方案設定

生成 -> 設定管理器



新增設定轉換

右擊 Web.config -> 新增設定轉換

新增應對的設定

將不同環境的設定項,新增至對應的組態檔中
Web.config

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

Web.Test.config

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

屬性值 xdt:Transform 「SetAttributes」 指示此轉換的目的是更改 Web.config 檔案中現有元素的屬性值。 xdt:Locator屬性值「Match (鍵) 」指示要修改的元素是其key屬性與此處指定的屬性匹配的key元素。 元素的唯一其他屬性 add 是 value,這就是部署 的Web.config 檔案中將發生更改的內容。 此處顯示的程式碼會導致 value 元素的屬性 EnvironmentappSettings 在部署的 Web.config 檔案中設定為「Test」。

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      
      在下例中,「Replace」轉換將替換 
      web.config 檔案的整個 <customErrors> 節。
      請注意,由於 
      在 <system.web> 節點下僅有一個 customErrors 節,因此不需要使用「xdt:Locator」特性。
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>

xdt:Transform="RemoveAttributes(debug)" 屬性指定要 debugsystem.web/compilation 已部署 的 Web.config 檔案中的元素中刪除該屬性。 每次部署釋出版本時,都會執行此操作。

預覽轉換

釋出

修改釋出設定

只對生成專案生效

程式碼區分

#if TEST

#else

#endif