2015-07-21 12 views
5

Ich habe eine Lösung, die drei Webprojekte (sowie eine Menge von Klassenbibliothek-Projekten) enthält. Die Webprojekte verwenden alle Web.config-Transformationen, um die Konfiguration pro Umgebung anzugeben.Web.config-Transformation wird zweimal auf Veröffentlichung ausgeführt

I Web.config haben verwandelt für mehrere Build-Profile, genannt Web.UAT.config, Web.Staging.config und Web.Release.config

Ich baue und das Projekt von meinem CI-Server bereitstellen MSBuild verwenden mit den folgenden Argumenten:

/t:Clean,Build /p:Configuration=UAT;DeployOnBuild=True;PublishProfile=UAT 

Für genau eine der drei Projekte, verwandelt sich die web.config erscheinen zweimal aufgetragen zu bekommen, mit Elementen xdt:Transform="Insert" erscheinen zweimal markiert. Suchen Sie in der Build-Ausgabe, so scheint es, dass alle drei Projekte die folgenden Ziele aus:

PreTransformWebConfig 
TransformWebConfigCore 
PostTransformWebConfig 
PreProfileTransformWebConfig 

Aber das problematische Projekt läuft auch diese Ziele (unmittelbar nach den oben genannten):

ProfileTransformWebConfigCore 
PostProfileTransformWebConfig 

Antwort

5

Die .csproj Dateien für Web-Projekte sind standardmäßig folgende:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 

diese Datei wiederum Importe \Web\Microsoft.Web.Publishing.targets, auch unter dem VSToolsPath (Auf meiner Dev-Maschine entspricht dies C:\Program Files (x86)\MSBuild\VisualStudio\v12.0).

Das interessantes Segment der Datei sieht wie folgt aus:

<ProjectProfileTransformFileName Condition="'$(ProjectProfileTransformFileName)'=='' And '$(PublishProfileName)' != '' ">$(_ProjectConfigFilePrefix).$(PublishProfileName)$(_ProjectConfigFileExtension)</ProjectProfileTransformFileName> 

<!--if $(TransformWebConfigEnabled) is also enabled and the ConfigTransform and ProfileTransform happen to have same filename, we default $(ProfilefileTransformWebCofnigEnabled) to false so it doesn't do double transform--> 
<ProfileTransformWebConfigEnabled Condition="'$(ProfileTransformWebConfigEnabled)'=='' And '$(TransformWebConfigEnabled)' == 'true' And ('$(ProjectProfileTransformFileName)' == '$(ProjectConfigTransformFileName)')">False</ProfileTransformWebConfigEnabled> 

Die doppelte Transformation als Ergebnis ProfileTransformWebConfigCore Lauf geschieht, die auf ProfileTransformWebConfigEnabled, die nur standardmäßig auf false, wenn die ProjectProfileTransformFileName und ProjectConfigTransformFileName bedingt ist sind gleich.

Ich habe das folgende Ziel für alle drei meiner Projekte:

<Target Name="DebugWebConfigTransform" AfterTargets="PreProfileTransformWebConfig"> 
    <Message Text="ProjectProfileTransformFileName: $(ProjectProfileTransformFileName)"/> 
    <Message Text="ProjectConfigTransformFileName: $(ProjectConfigTransformFileName)"/> 
    </Target> 

Für das problematische Projekt, dieses Ziel Ausgang der folgende:

DebugWebConfigTransform: 
    ProjectProfileTransformFileName: Web.UAT.config 
    ProjectConfigTransformFileName: Web.Release.config 

Da diese beiden Werte waren anders, die Doppel die Transformation erfolgte aus den oben beschriebenen Gründen.

Der Grund, dass der ProjectConfigTransformFilename auf Web.Release.config festgelegt wurde, war, dass die ProjectConfigurationPlatforms in meiner .sln Datei falsch war. Das .sln Dateikonfiguration | Plattformpaar von UAT|Any CPU wurde für dieses Projekt Release|Any CPU zugeordnet.

Ich denke, es war tatsächlich die Anwendung der UAT und Release-Transformationen als Ergebnis (aufgrund der genauen Art meiner Transformationen und der Reihenfolge, in der sie angewendet wurden, war dies nicht von der UAT-Transformation zweimal anwenden).

Aktualisierung der ProjectConfigurationPlatforms Zuordnung in der Lösungsdatei löste das Problem für mich.

0

Dieses Problem trat bei mir auf, weil ich mehrere Projekte in meiner Lösungskonfiguration mit verschiedenen Konfigurationen hatte.

Es wurde mehr als eine web.config laufen verwandelt, weil diese Konfiguration: Ich erhielt nicht mehr die Probleme in meinem web.config

Configuration Manager

Nach den Projekten Schalen die gleiche Konfiguration zu verwenden.

Verwandte Themen