Transform Web.config với Debug/Release on Build

Hôm trước mình build 1 web application trên VSTS, gặp trường hợp lỗi là web.config không tự động transform sang chế độ release. Cách khắc phục là mình thực hiện việc transform web.config trước khi build solution.

Files trong project

Tạo mới 1 dự án Web API 2. Bạn sẽ có 3 file web config:
  1. Web.config
  2. Web.Debug.config
  3. Web.Release.config
Tạo file Web.Base.config. Copy toàn bộ nội dung từ Web.config => Web.Base.config. File Web.Base.config được dùng làm file gốc để thực hiện việc transform web config.



Web.Config

Bạn mở file <project-name>.csproj bằng notepad++, thêm vào đoạn code sau đây trước thẻ </project>

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
  </Target>


Bạn có thể build, run, hoặc publish project. File Web.config sẽ được transformed.
Với các này, bạn có thể transform Web.config trên VSTS trong quá trình CI

Khuyết điểm

Đây là 1 cách hay nhưng nó có 1 khuyến điểm là khi bạn cài đặt nuget hay thêm 1 service endpoint nào đó, web.config của bạn bị thay đổi.
Ví dụ: Bạn update NewtonSoft.Json. Lúc này Web.config đã được cập nhật

Copy toàn bộ Web.config sang file Web.Base.config. Sau đó bạn build. Mọi thay đổi trong Web.config được copy từ Web.Base.config + chế độ debug/release.

Tham khảo

ASP.NET: Transform Web.config with Debug/Release on Build

Chúc các bạn thành công.
Nhatkyhoctap's blog