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