I file .csproj
per il web i progetti sono i seguenti per impostazione predefinita:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Questo file delle importazioni turno \Web\Microsoft.Web.Publishing.targets
, anche sotto il VSToolsPath (sulla mia macchina dev, questo corrisponde a C:\Program Files (x86)\MSBuild\VisualStudio\v12.0
).
L'interessante segmento di questo file è simile al seguente:
<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>
Il doppio trasformano stava accadendo a causa di ProfileTransformWebConfigCore
in esecuzione, che è subordinata ProfileTransformWebConfigEnabled
, che solo il default è false se il ProjectProfileTransformFileName
e ProjectConfigTransformFileName
sono uguali.
ho aggiunto il seguente obiettivo per tutti e tre i miei progetti:
<Target Name="DebugWebConfigTransform" AfterTargets="PreProfileTransformWebConfig">
<Message Text="ProjectProfileTransformFileName: $(ProjectProfileTransformFileName)"/>
<Message Text="ProjectConfigTransformFileName: $(ProjectConfigTransformFileName)"/>
</Target>
Per il progetto problematico, questa uscita di destinazione il seguente:
DebugWebConfigTransform:
ProjectProfileTransformFileName: Web.UAT.config
ProjectConfigTransformFileName: Web.Release.config
Dal momento che questi due valori erano diverse, il doppio la trasformazione stava avvenendo per le ragioni sopra descritte.
Il motivo per cui ProjectConfigTransformFilename era impostato su Web.Release.config era che ProjectConfigurationPlatforms
nel mio file .sln
non era corretto. La coppia di piattaforme di configurazione .sln
del file UAT|Any CPU
veniva mappata su Release|Any CPU
per questo progetto.
Penso che sia stato in realtà applicando l'SVS e uscita trasforma come risultato (a causa della natura esatta dei miei trasforma e l'ordine in cui sono stati applicati, questo era indistinguibile da applicare l'UAT trasformare due volte).
L'aggiornamento del mapping ProjectConfigurationPlatforms
nel file di soluzione ha risolto il problema per me.