文章目錄
如何在 debug 時使用對應組態設定的 web.config
自從 web.config transform (可以依不同的組態設定 e.g.: debug、release 設定不同的值) 的功能出現後,在不同環境間的變數處理變得容易許多,雖然有方法可以預覽及比較最後產出的 config 內容,但我們有時需要針對不同的組態設定來進行 debug,此時就會發現切換 Visual Studio 到不同組態(configuration)時,依舊使用預設的 web.config 執行,而非對應的 web.{組態}.config ,這是因為 web.config transform 原始設計就是只在執行 部署 時才會觸發 config 轉換的緣故,身為一個偷懶追求效率的工程師,你一定也不想為了 debug 不同組態的參數就手動修改 web.config,如果設定沒幾個就算了,一旦設定有幾十個,我想還是來看看可以怎麼設定吧
基本設定
- 使用預設 ASP.NET MVC 專案範本
- 在 web.config 加入一個 appsetting - <add key="yowko" value="yowko"/
- 分別修改不同組態時 web.config 的設定內容 - Web.Debug.config- <appSettings> <add key="yowko" value="Debug" xdt:Transform="Replace" xdt:Locator="Match(key)"/> </appSettings>
- Web.Release.config- <appSettings> <add key="yowko" value="Release" xdt:Transform="Replace" xdt:Locator="Match(key)"/> </appSettings>
 
- 修改 HomeController - public ActionResult Index() { ViewBag.Message = ConfigurationManager.AppSettings["yowko"]; return View(); }
- 修改 Index.cshtml - @{ ViewBag.Title = "Home Page"; } @ViewBag.Message
實際問題
切換不同 configuration 仍顯示預設 web.config 的設定

預覽對應組態的 config 結果
- 在想要預覽的組態 config 上按右鍵 –> Preview Transform  
- 預覽結果 - 分割視窗左邊是原本的 web.config,右邊是轉換後的 web.config,畫面上會用紅色表示被修改前的內容,綠色表示修改後的內容  
設定 build 即觸發 web.config transform
- 修改 .csproj 檔 - Upload Project(卸載專案) - 專案 –> 右鍵 –> Upload Project  
 
- Edit .csproj - 卸載的專案 –> 右鍵 –> Edit {projectname}.csproj  
 
- 在設定結尾 - </Project>前加入下列設定- VS 2015 - <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" /> <Target Name="BeforeBuild"> <TransformXml Source="Web.template.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> </Target>
- VS 2017 - <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" /> <Target Name="BeforeBuild"> <TransformXml Source="Web.template.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> </Target>
- VS 2017 因為安裝輕量化,有些共用元件預設沒有安裝,這個功能便是其一  
 
- 儲存後重新載入專案 - 卸載的專案 –> 右鍵 –> Reload Project  
 
- 複製 web.config 命名為 web.template.config - 以後修改就 web.config 的內容就直接修改 - web.template.config
- build project 就會更新 web.config - web.config 開啟狀態會要求重新載入  
 
 
- 使用套件 - 安裝 - Configuration Transform- VS 主選單 Tools –> Extensions and Updates  
- 在 Online tab –> 搜尋 - Configuration Transform–> 安裝 
 
- 實際使用 - 在想要取得的組態 config 上 –> 右鍵 –> Execute transformation 
- e.g. 取得 release 的 config –> 在 web.release.config 上按右鍵執行  
 
- VS 2017 暫無法使用 (2017/04/22) 
 
實際效果
- 可以依不同的 configuration 顯示對應設定內容  
心得
- 使用 .csproj 檔 - 優點:
- 設定一次就永久有效 
- 缺點: 
- 多了一個 template 檔案,容易造成新進人員混淆 
- 每次 build 都會執行,會影響開發節奏 
 
- 使用套件 - 優點:
- 有需要才執行,速度可控制
- 程式碼維護上比較直覺 
- 缺點: 
- 需要安裝套件,套件目前仍無法於 vs2017 中使用 
 
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-08
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
 Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
