---
# System prepended metadata

title: 依組態更換 Config 設定值
tags: [C#]

---

---
title: 依組態更換 Config 設定值
tags: C#
---

# 依組態更換 Config 設定值

### 前言

在專案進行中，總會有Web.config設定的需求，當要發行佈版時會依環境的不同，設定值也會有所不同，以前總是用手動方式進行更改，改了一段時間，覺的這樣方式很不可靠，一個分心就很容易改錯。因此上網找了方法並記錄下來，方便之後忘記還有記錄可以回想起來。

### 實作步驟

* 建立組態
* 安裝擴充工具
* 產生對應的設定檔
* 置換config設定值

### 建立組態

從組態管理員建立一組新的組態

![](https://i.imgur.com/n5gZ1f2.png)

設定名稱，來源選擇Debug，在這個組態下就可以debug

![](https://i.imgur.com/g6BgHGu.png)

### 安裝擴充工具

使用 Configuration Transform 產生設定檔

![](https://i.imgur.com/7L24Mtl.png)


### 產生對應的設定檔

選擇 Add Config Transforms 建立設定檔

![](https://i.imgur.com/nWhJkYF.png)

分別產生 Debug、Dev、Release 檔案

![](https://i.imgur.com/U4H9tZj.png)

### 置換config設定值

依不同設定檔，置換內容

App.config
```
<appSettings>
    <!--參數設定-->
    <add key="WebAPI" value="localUrl"/>
</appSettings>
```

App.Dev.config
```
<appSettings>
    <add key="WebAPI" value="DebugUrl" xdt:Locator="Match(key)" xdt:Transform="Replace" />
</appSettings>
```

App.Debug.config
```
<appSettings>
    <add key="WebAPI" value="DevUrl" xdt:Locator="Match(key)" xdt:Transform="Replace" />
</appSettings>
```

App.Release.config
```
<appSettings>
    <add key="WebAPI" value="ReleaseUrl" xdt:Locator="Match(key)" xdt:Transform="Replace" />
</appSettings>
```

**備註**

因為擴充工具不支援 Visual Studio 2017版本，所以需先卸載專案，手動修改.csproj 檔

![](https://i.imgur.com/63zPxwW.png)
 
在這段設定檔下方
```
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
```

貼上這段程式碼，重Build Project即可
```
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
        <TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="App.config" />
</Target>
```



**參考資料**
> https://docs.microsoft.com/en-us/previous-versions/dd465326(v=vs.100)
> https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
> https://blog.yowko.com/webconfig-transform-when-debug/