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.