VisualStudio標準では、XML-Document-Transformで差分を記述し、元のファイルを変換するという方法となる。
Web アプリケーション プロジェクト配置の Web.config 変換構文
以下のようなファイルを用意し、Web.Debug.configやWeb.Release.configといったファイル名にすれば、Debugビルド時にはWeb.Debug.configファイルを、Releaseビルド時にはweb.Release.configファイルがWeb.configとマージされる。
[/xml]
Debug/Releaseだけでは2環境しか対応できないが、3環境以上対応したい場合もそれなりにある。
その場合はProjectConfigTransformFileNameプロパティを変更することで対応可能。
[/xml]
というようなtargetsファイルをImportしておけば、
msbuild /t:Package /p:DeploymentEnvironment=production
とかやった場合にWeb.production.configを用いてWeb.configが変換される。
これはMicrosoft.Web.Publishing.targetsの内部動作に依存している。
VisualStudioに含まれるtargetsであるため、VSをインストールしないと利用できない。
ここでDeploymentEnvironmentのみ変更してビルドしなおした場合、Web.configが最新状態であるとみなされて変換されないことがある。
PostTransformWebConfig: Web.production.config を使用して Web.config を obj\Release\TransformWebConfig\transformed\Web.config に変換しました。 PipelineTransformPhase: パイプラインの発行の変換フェーズ PreAutoParameterizationWebConfigConnectionStrings: obj\Release\CSAutoParameterize\original\Web.config への obj\Release\TransformWebConfig\transformed\Web.config のコピーをスキップします。ファイル obj\Release\CSAutoParameterize\original\Web.config は最新のものです AutoParameterizationWebConfigConnectionStringsCore: すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "AutoParameterizationWebConfigConnectionStringsCore" を省略します。
この場合、Cleanターゲットも実行するようにすれば対処可能。
PostTransformWebConfig: Web.production.config を使用して Web.config を obj\Release\TransformWebConfig\transformed\Web.config に変換しました。 PipelineTransformPhase: パイプラインの発行の変換フェーズ PreAutoParameterizationWebConfigConnectionStrings: ディレクトリ "D:\Jenkins\workspace\example\obj\Release\CSAutoParameterize\transformed\" を作成しています。 obj\Release\TransformWebConfig\transformed\Web.config を obj\Release\CSAutoParameterize\original\Web.config にコピーしています。 AutoParameterizationWebConfigConnectionStringsCore: ソース ファイルを変換しています: D:\Jenkins\workspace\example\obj\Release\TransformWebConfig\transformed\Web.config 変換ファイルを適用しています:出力ファイル: obj\Release\CSAutoParameterize\transformed\Web.config 変換に成功しました