私たちのプロジェクトには、dev、qa、uat、prod の構成を維持しなければならないという同じ問題があります。これが私たちが従ったものです(MSBuildに精通している場合にのみ適用されます):
MSBuild コミュニティ タスク拡張機能と共に MSBuild を使用します。これには、開始する正しいノードを指定すると、任意の XML ファイルのエントリを「一括更新」できる「XmlMassUpdate」タスクが含まれます。
実装する:
1) dev 環境エントリを持つ構成ファイルが 1 つ必要です。これは、ソリューションの構成ファイルです。
2)環境ごとに異なるエントリ(主にappSettingsとConnectionStrings)のみを含む「Substitutions.xml」ファイルが必要です。環境全体で変更されないエントリは、このファイルに入れる必要はありません。それらはソリューションの 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' に置き換えます。あなたはのために構築しています。回復不可能なミスを避けるために、実際の構成ファイル自体ではなく、構成ファイルのコピーで作業する必要があることに注意してください。
ビルド ファイルを実行し、更新された構成ファイルを展開環境に移動するだけで完了です。
より良い概要については、これを読んでください:
http://blogs.microsoft.co.il/blogs/dorony/archive/2008/01/18/easy-configuration-deployment-with-msbuild-and-the-xmlmassupdate-task.aspx