.Net Framework 4.0 提供了 Transformation 功能,讓 Web.Config 與 app.Config 可以依據組態設定建置不同的參數,這項好用的功能在 .Net Core 的專案中已無法作用,本文紀錄如何再次啟用這好用的功能。
情境說明
ASP.NET Core 2.0 是靠 application.json 來取代 web.config,但有時候我們仍需要在 web.config 作一些環境參數切換,甚至有些第三方套件仍是倚賴 XML 做設定 (ex: Nlog.xml),以下步驟將說明如何讓 ASP.NET Core 2.0 重新啟用 Transformation
環境說明
- Visual Studio 2017
- ASP.Net Core 2.0
加入 web.config 設定
ASP.Net Core 範本專案沒有 web.config, 我們先手動新增並輸入以下設定。
1 | <system.webServer> |
再新增 web.release.config
1 |
|
在 web.config 中指定了環境變數為 Development,而 web.release.config 則在 release 組態建置時 將其移除,如此便達成了 Debug 組態時專案使用 application.development.json,Realese 組態使用 applictaion.json。
編輯 csproj
接下來我們直接編輯 csproj,加入以下設定。
1 | <ItemGroup> |
請直接編輯 csproj,請勿使用 Nuget Manager 安裝。
在 </project>
之前請輸入以下設定
1 | <Target Name="ApplyXdtConfigTransform" BeforeTargets="_TransformWebConfig"> |
主要的執行主體在 <Exec />
區段,執行的時機設定在 BeforeTargets="_TransformWebConfig"
完整參數說明如下
1 | .NET Core XML Document Transformation |
發行專案
接下來就來測試吧,發行 Debug 組態 與 Release 組態各建置一次, web.config 應如下方有正確的切換了。
Debug
1 |
|
Release
1 |
|
結論與補充
- 若是 ASP.NET Core 1.x 請參考 點我
- 範例只示範了 remove ,相關 XDT 語法請參考 MDSN XDT Reference
- 不同的 XML 皆可以用類似的設定做 Transformation