Ich habe eine Reihe verschiedener Konfigurationen ausprobiert, aber nicht das gewünschte Ergebnis erzielt.
TL;DR
Ich versuche, Config-Transformationen in meinem Build-Prozess hinzuzufügen und bin auf der Suche nach dem richtigen Weg, um es von MSBuild zu tun, so dass es in meinen Bereitstellungen über MSDeploy zeigt.
Hintergrund
- Ich habe eine WebApp (MVC3), eine Core app (CS Class Lib), und zwei Testklassenbibliotheken, eine für jede.
- Ich habe ein Build-Skript in meiner Lösung, die MSBuild zum Kompilieren verwendet.
- Eines dieser MSBuild-Ziele wird mit MSDeploy auf einem IIS-Server bereitgestellt
- Dieser Prozess funktioniert bisher sowohl manuell als auch über CruiseControl.NET
Ziel
Ich möchte Web.Config Transformationen zu diesem Prozess hinzufügen. Ich dachte, ich würde etwas einfaches auf den ersten, wie eine app-Einstellung namens "PEAppsEnvironmentName", die ich machen würde, Dev, Test oder Prod basierend auf der aktuellen Umgebung tun.
Bisherige Theorie
Für mich sieht es so aus, als ob ich beim Paketieren mit MSDeploy die Konfigurationsdatei nicht umwandle.
Wenn ich MSBuild mit der DeployOnBuild-Option auf true gesetzt ausführen, erstellt es ein anderes Paket, das die entsprechend transformiert config hat . Es scheint nur, dass ich es irgendwie nicht hinbekomme, dass alles zusammenpasst. Das Endergebnis ist, dass die Webseite "None" (die ursprüngliche Einstellung) anstelle der umgewandelten Zeichenfolge "Development" anzeigt.
Ich denke, wenn ich herausfinden könnte, wie ich MSDeploy während der Paketierungsphase verwenden kann, um die MSConfig zu transformieren, wäre ich startklar.
Code
Meine web.config-Datei
<appSettings>
<add key ="PEAppsEnvironmentName" value="None"/>
...
</appSettings>
Meine Web.Dev.config-Datei
<appSettings>
<add key ="PEAppsEnvironmentName" xdt:Transform="Replace" xdt:Locator="Match(key)" value="Development" />
</appSettings>
Meine MSBuild-Ziele
Eigenschaftsgruppe mit der Standardkonfiguration "Dev"
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Dev</Configuration>
</PropertyGroup>
Mein MSBuild-"Kompilier"-Ziel
<Target Name="Compile" DependsOnTargets="Init">
<MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifacts.FullPath);DeployOnBuild=True"/>
</Target>
Mein MSBuild-"Paket"-Ziel
<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>
Mein MSBuild "Deploy" Ziel
(geschrubbt für PWs, etc.)
<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>