โครงการของเรามีปัญหาเดียวกันกับที่เราต้องบำรุงรักษา config สำหรับ dev, qa, uat และ prod นี่คือสิ่งที่เราติดตาม (ใช้เฉพาะในกรณีที่คุณคุ้นเคยกับ MSBuild):
ใช้ MSBuild กับส่วนขยายภารกิจ MSBuild Community ซึ่งรวมถึงงาน 'XmlMassUpdate' ที่สามารถ 'อัปเดตข้อมูลจำนวนมาก' ในไฟล์ XML ใด ๆ เมื่อคุณให้โหนดที่ถูกต้องเพื่อเริ่มต้น
ที่จะใช้:
1) คุณต้องมีไฟล์กำหนดค่าหนึ่งไฟล์ซึ่งจะมีรายการ dev env ของคุณ นี่คือไฟล์กำหนดค่าในโซลูชันของคุณ
2) คุณต้องมีไฟล์ 'Substitutions.xml' ที่มีเฉพาะรายการที่ต่างกัน (appSettings และ ConnectionStrings เป็นส่วนใหญ่) สำหรับแต่ละสภาพแวดล้อม รายการที่ไม่เปลี่ยนแปลงในสภาพแวดล้อมไม่จำเป็นต้องใส่ในไฟล์นี้ พวกเขาสามารถอาศัยอยู่ในไฟล์ web.config ของการแก้ปัญหาและจะไม่ได้สัมผัสกับงาน
3) ในไฟล์บิลด์ของคุณเพียงแค่เรียกภารกิจการอัพเดต XML จำนวนมากและจัดเตรียมสภาวะแวดล้อมที่เหมาะสมเป็นพารามิเตอร์
ดูตัวอย่างด้านล่าง:
<!-- 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>
แทนที่ '$ Environment' ด้วย 'QA' หรือ 'Prod' โดยอิงจาก env คุณกำลังสร้างเพื่อ โปรดทราบว่าคุณควรทำงานกับสำเนาของไฟล์กำหนดค่าและไม่ใช่ไฟล์กำหนดค่าจริงเพื่อหลีกเลี่ยงข้อผิดพลาดที่ไม่สามารถกู้คืนได้
เพียงแค่เรียกใช้ไฟล์บิลด์จากนั้นย้ายไฟล์กำหนดค่าที่อัปเดตไปยังสภาพแวดล้อมการปรับใช้ของคุณและคุณทำเสร็จแล้ว!
สำหรับภาพรวมที่ดีขึ้นให้อ่านสิ่งนี้:
http://blogs.microsoft.co.il/blogs/dorony/archive/2008/01/18/easy-configuration-deployment-with-msbuild-and-the-xmlmassupdate-task.aspx