2015-07-21 16 views
5

Ho una soluzione che include tre progetti Web (oltre a numerosi progetti di librerie di classi). Tutti i progetti Web utilizzano le trasformazioni Web.config per specificare la configurazione per l'ambiente.Trasformazione Web.config è in esecuzione due volte sulla pubblicazione

ho web.config trasforma per più profili di generazione, denominati Web.UAT.config, Web.Staging.config e Web.Release.config

sto costruendo e la distribuzione del progetto dal mio server CI utilizzando MSBuild con i seguenti argomenti:

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

per esattamente uno dei tre progetti, il web.config trasforma sembrano ottenere applicato due volte, con gli elementi contrassegnati xdt:Transform="Insert" appare due volte. Guardando in uscita costruzione, sembra che tutti e tre i progetti eseguiti i seguenti obiettivi:

PreTransformWebConfig 
TransformWebConfigCore 
PostTransformWebConfig 
PreProfileTransformWebConfig 

ma il progetto problematico gestisce anche questi obiettivi (subito dopo quelli sopra elencati):

ProfileTransformWebConfigCore 
PostProfileTransformWebConfig 

risposta

5

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.

0

Questo problema si è verificato per me perché ho avuto più progetti nella configurazione della mia soluzione utilizzando diverse configurazioni.

E 'stato eseguito più di un web.config trasforma a causa di questa configurazione:

Configuration Manager

Dopo il passaggio dei progetti per utilizzare la stessa configurazione che ho ricevuto non sono più i problemi nel mio web.config.

Problemi correlati