VisualStudio標準では、XML-Document-Transformで差分を記述し、元のファイルを変換するという方法となる。
Web アプリケーション プロジェクト配置の Web.config 変換構文
以下のようなファイルを用意し、Web.Debug.configやWeb.Release.configといったファイル名にすれば、Debugビルド時にはWeb.Debug.configファイルを、Releaseビルド時にはweb.Release.configファイルがWeb.configとマージされる。
[xml title=”Web.Release.config”]
[/xml]
Debug/Releaseだけでは2環境しか対応できないが、3環境以上対応したい場合もそれなりにある。
その場合はProjectConfigTransformFileNameプロパティを変更することで対応可能。
[xml title=”sample.targets” mark=”3″]
@(_VSProjectConfigFileName->’%(FileName).$(DeploymentEnvironment)%(Extension)’)
[/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
変換に成功しました