讓ASP.NET網站在開發除錯時期擁有Web.config文件轉換功能

讓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 都通用,但我沒一一嘗試就是了)

  1. 先卸載專案

    卸載專案
  2. 然後開啟專案所在資料夾,複製 Web.config 並重新命名為 Web.Template.config。

    重新命名Web.Template.config
  3. 我們要修改 web.config 的關聯性

    修改.csproj

    搜尋"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。

  4. 這個步驟最重要,我們希望在建置(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 設置。

  5. 重新載入專案後可以看到依賴關係的改變:

    Web.Template.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/

1 則留言:

  1. 謝謝拯救我喜歡在 debug 時改配置但又因為需要發布所以悲劇的人生ww

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。