これを使用してさまざまな構成を試しましたが、結果が得られませんでした。
TL;DR
構成変換をビルド プロセスに追加しようとしていますが、MSDeploy を介して展開に表示されるように、MSBuild からそれを行う正しい方法を探しています。
バックグラウンド
- WebApp (MVC3)、Core アプリ (CS Class Lib)、および 2 つのテスト クラス ライブラリ (それぞれに 1 つずつ) があります。
- 私のソリューションには、MSBuild を使用してコンパイルするビルド スクリプトがあります。
- これらの MSBuild ターゲットの 1 つは、MSDeploy を使用して IIS サーバーにデプロイします。
- このプロセスは、これまで手動でも CruiseControl.NET 経由でも機能しています。
ゴール
このプロセスに Web.Config 変換を追加したいと思います。「PEAppsEnvironmentName」というアプリ設定のように、現在の環境に基づいて Dev、Test、または Prod を作成するなど、最初は簡単なことをしようと考えました。
これまでの理論
私には、MSDeploy でパッケージ化するときに、構成ファイルを変換していないように見えます。
DeployOnBuild オプションを true に設定して MSBuild を実行すると、適切に変換された config を持つ別のパッケージが作成されます。どういうわけか、すべてを一致させることはできないようです。最終結果は、変換された「開発」文字列ではなく、「なし」(初期設定) が Web ページに表示されることです。
パッケージ化段階で MSDeploy を使用して MSConfig を変換する方法を見つけられれば、それでいいと思います。
コード
私の web.config ファイル
<appSettings>
<add key ="PEAppsEnvironmentName" value="None"/>
...
</appSettings>
私の Web.Dev.config ファイル
<appSettings>
<add key ="PEAppsEnvironmentName" xdt:Transform="Replace" xdt:Locator="Match(key)" value="Development" />
</appSettings>
私の MSBuild ターゲット
デフォルト設定を示すプロパティ グループは「Dev」です
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Dev</Configuration>
</PropertyGroup>
私の MSBuild の「コンパイル」ターゲット
<Target Name="Compile" DependsOnTargets="Init">
<MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifacts.FullPath);DeployOnBuild=True"/>
</Target>
私のMSBuild「パッケージ」ターゲット
<Target Name="Package" DependsOnTargets="Compile;Test">
<PropertyGroup>
<PackageDir>%(PackageFile.RootDir)%(PackageFile.Directory)</PackageDir>
<Source>%(WebSite.FullPath)</Source>
<Destination>%(PackageFile.FullPath)</Destination>
</PropertyGroup>
<MakeDir Directories="$(PackageDir)"/>
<Exec Command='"@(MSDeploy)" -verb:sync -source:iisApp="$(Source)" -dest:package="$(Destination)" '/>
</Target>
私の MSBuild の「デプロイ」ターゲット
(PWなどのスクラブ)
<Target Name='Deploy' DependsOnTargets='Package'>
<PropertyGroup>
<Source>%(PackageFile.FullPath)</Source>
</PropertyGroup>
<Exec Command ='"@(MsDeploy)" -verb:sync -source:package="$(Source)" -dest:iisApp=PEApps,computerName=$(WebServerName),username=[User],password=[Password]'/>
</Target>