Dự án của chúng tôi có cùng một vấn đề khi chúng tôi phải duy trì cấu hình cho dev, qa, uat và prod. Đây là những gì chúng tôi đã làm theo (chỉ áp dụng nếu bạn quen thuộc với MSBuild):
Sử dụng MSBuild với phần mở rộng nhiệm vụ Cộng đồng MSBuild. Nó bao gồm tác vụ 'XmlMassUpdate' có thể 'cập nhật hàng loạt' trong bất kỳ tệp XML nào khi bạn cung cấp cho nó nút chính xác để bắt đầu.
Thực hiện:
1) Bạn cần có một tệp cấu hình sẽ có các mục dev env của bạn; đây là tập tin cấu hình trong giải pháp của bạn
2) Bạn cần có tệp 'Substitutions.xml', chỉ chứa các mục nhập KHÁC BIỆT (phần lớn là cài đặt ứng dụng và ConnectionStrings) cho mỗi môi trường. Các mục không thay đổi trên môi trường không cần phải được đặt trong tệp này. Họ có thể sống trong tệp web.config của giải pháp và sẽ không bị tác vụ chạm vào
3) Trong tệp xây dựng của bạn, chỉ cần gọi tác vụ cập nhật hàng loạt XML và cung cấp môi trường phù hợp làm tham số.
Xem ví dụ dưới đây:
<!-- Actual Config File -->
<appSettings>
<add key="ApplicationName" value="NameInDev"/>
<add key="ThisDoesNotChange" value="Do not put in substitution file" />
</appSettings>
<!-- Substitutions.xml -->
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate">
<substitutions>
<QA>
<appSettings>
<add xmu:key="key" key="ApplicationName" value="NameInQA"/>
</appSettings>
</QA>
<Prod>
<appSettings>
<add xmu:key="key" key="ApplicationName" value="NameInProd"/>
</appSettings>
</Prod>
</substitutions>
</configuration>
<!-- Build.xml file-->
<Target Name="UpdateConfigSections">
<XmlMassUpdate ContentFile="Path\of\copy\of\latest web.config" SubstitutionsFile="path\of\substitutionFile" ContentRoot="/configuration" SubstitutionsRoot="/configuration/substitutions/$(Environment)" />
</Target>
thay thế '$ Môi trường' bằng 'QA' hoặc 'Prod' dựa trên những gì env. bạn đang xây dựng cho. Lưu ý rằng bạn nên làm việc trên một bản sao của tệp cấu hình chứ không phải chính tệp cấu hình thực tế để tránh mọi lỗi không thể phục hồi.
Chỉ cần chạy tệp xây dựng và sau đó di chuyển tệp cấu hình được cập nhật vào môi trường triển khai của bạn và bạn đã hoàn tất!
Để biết tổng quan tốt hơn, hãy đọc điều này:
http://bloss.microsoft.co.il/bloss/dorony/archive/2008/01/18/easy-configuration-deployment-with-msbuild-and-the-xmlmassupdate-task.aspx