讓ASP.NET網站在開發除錯時期擁有Web.config文件轉換功能
網站開發到一定規模,你一定有經驗,開始在 Web.config 裡去註解A執行B設定,或註解C執行D設定,最常碰到的需求有:測試區與正式區的 appSettings
設定,測試區與正式區的 connectionStrings
設定等。當專案離開本機開始發行至測試區或正式區時,千萬不要還在用切換註解的方式,應該參考 Kevin:「發佈網站時依據組態設定的不同而轉換 Web.Config」的模式去進行發行時 *.config 的切換。這種動作的名稱「XML-Document-Transform」(XML文件轉換),簡單說,就是利用 Locator
找出要修改位置,再利用 Transform
屬性指定進行的動作。
發行能,那本機除錯呢?
發行可以利用「XML-Document-Transform」來解決不同區域不同配置的問題。但開發人員最常碰到卻是開發當下!開發除錯當下,你無法去只是簡單切換 Debug | Release 來達到或啟用XML文件轉換的功能,假設,你想將原本 SqlLocalDb 的連線字串切換至 SQL Server Express 連線字串進行測試時,好像只有註解、移除註解這條路。 :-(
這樣的路,其實走了好久好久,我累了,我想,是應該跟它分手了。(超假文青 XD)
啟用本機除錯XML文件轉換
這裡會利用如何:擴充 Visual Studio 建置處理序裡的技巧。以下技巧通用於 ASP.NET WebForms 與 ASP.NET MVC 與 ASP.NET Web API 專案。(照理說是只要是 XML 的 .config 都通用,但我沒一一嘗試就是了)
-
先卸載專案
-
然後開啟專案所在資料夾,複製 Web.config 並重新命名為 Web.Template.config。
-
我們要修改 web.config 的關聯性
搜尋"web.config"應該會找到類似以下設定:
<Content Include="Web.config" /> <Content Include="Web.Debug.config"> <DependentUpon>Web.config</DependentUpon> </Content> <Content Include="Web.Release.config"> <DependentUpon>Web.config</DependentUpon> </Content>
加入一行
<None Include="Web.Template.config"/>
設置,還需要修改"Web.Debug.config"與"Web.Release.config"的關聯性設定:<Content Include="Web.config" /> <None Include="Web.Template.config"/> <None Include="Web.Debug.config"> <DependentUpon>Web.Template.config</DependentUpon> </None> <None Include="Web.Release.config"> <DependentUpon>Web.Template.config</DependentUpon> </None>
在
DependentUpon
我們修改依賴 Web.Template.config。 -
這個步驟最重要,我們希望在建置(Build)時去執行XML文件轉換,利用如何:擴充 Visual Studio 建置處理序裡的技巧,在
</Project>
之前加入以下設置:<PropertyGroup> <BuildDependsOn> CustomWebConfigTransform; $(BuildDependsOn); </BuildDependsOn> </PropertyGroup> <Target Name="CustomWebConfigTransform"> <TransformXml source="Web.template.config" transform="Web.$(Configuration).config" destination="Web.config" /> </Target>
簡單說明,source 是我們的樣版;transform 會依現我們現在是在 Debug | Realse | 自訂的 .config 規則去進行XML文件轉換,destination 就是輸出結果。而啟用的網站正好是套用 Web.config 設置。
-
重新載入專案後可以看到依賴關係的改變:
在 Web.Debug.config 加入XML文件轉換測試條件:
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <appSettings> <add key="Mode" value="Debug" xdt:Transform="Insert"/> </appSettings> </configuration>
在 Web.Release.config 加入XML文件轉換測試條件:
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <appSettings> <add key="Mode" value="Release" xdt:Transform="Insert"/> </appSettings> </configuration>
小結
這種開發時期的XML文件轉換的功能,在需要經常切換 Web.config 內的設置時,非常好用與實用。瞭解整體設計後,靈活度就非常的高,發行的XML組態設計,開發的XML組態設計都能並行使用。
是自己書讀太少,不是 Visual Studio (.NET Framework) 做不到。讓我們歡呼一聲 Visual Studio 好棒棒!
http://www.kongsli.net/2012/01/13/enabling-web-transforms-when-debugging-asp-net-apps/
謝謝拯救我喜歡在 debug 時改配置但又因為需要發布所以悲劇的人生ww
回覆刪除