2013-05-01 12 views
30

Sto provando ad avere il mio TFS Build per creare la trasformazione web.config associata alla configurazione che ho selezionato per la mia build. Quando eseguo la build, controllo il file web.config e non sono state applicate trasformazioni. Quando pubblico una pubblicazione da VS2012, la trasformazione funziona correttamente.TFS 2012 e web.config transforms

Ho impostato TFS 2012 (aggiornamento 2) e un server separato per le build. Non ho installato VS2012 sul server di build, ma ho copiato i file e le cartelle C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web e WebApplications dalla mia macchina di sviluppo al server di build.

Ho creato alcune configurazioni nel mio progetto e ho aggiunto alcune transformazioni al web associato. {Configname} .config.

Ho creato una build e impostato gli elementi da costruire - Configurazioni da costruire in una delle configurazioni del mio progetto. Ho notato che ha solo Debug e Release, non ha nessuna delle configurazioni che ho creato. (Domanda a margine: è corretta o dovrebbe mostrare tutte le configurazioni che ho creato?)

Così eseguo una build e controllo la cartella di output e web.config non ha applicato le trasformazioni. C'è qualcos'altro che devo fare?

risposta

2

È possibile digitare il nome di Configurazione nell'elenco "Elementi da compilare -> Configurazioni per costruire".

Se questo non aiuta, provare ad aggiungere seguente argomento MSBuild:/p: TransformConfigFiles = true (3. Avanzate -> MSBuild Arguments)

37

Basta gettare/p: TransformConfigFiles = true lì non lo farà effettivamente fare qualsiasi cosa

È inoltre necessario aggiungere questo obiettivo per il file di progetto:

<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'"> 
    <ItemGroup> 
     <DeleteAfterBuild Include="$(WebProjectOutputDir)\Web.*.config" /> 
    </ItemGroup> 
    <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)\Web.config" /> 
    <Delete Files="@(DeleteAfterBuild)" /> 
</Target> 

Questa è la mia fonte: http://blog.degree.no/2012/03/automatic-config-transformations/

+0

funziona per me! E i miei complimenti, il tuo esempio di codice qui risolve anche l'errore di battitura da quel post del blog (che lascia un \ out in due punti). – Abacus

+1

Dopo aver aggiunto quelle righe al file csproj durante la compilazione, ho ricevuto un errore: "L'attività" TransformXml "non è stata trovata." Se qualcuno ha lo stesso è possibile aggiungerlo prima di questo target Vitalii

+0

ottimo, questo ha funzionato per me (VS2015, TFS2015)! Mille grazie! Tuttavia, è molto strano che basta specificare la configurazione di build non è sufficiente .... MS a volte fa implementazioni strane ... – Vladislav

1

Fare clic con il file di soluzione, andare alle proprietà, fare clic su Proprietà di configurazione e fare clic su Configurazione Manager in cima. Assicurati che la configurazione per l'ambiente diverso sia impostata correttamente. se non è impostato correttamente, impostalo correttamente e controlla il codice. Ora vai al tuo modello di build e controlla la configurazione per costruire la proprietà nella scheda del processo, devi essere in grado di vedere le tue diverse configurazioni. se la configurazione è già impostata correttamente, è anche possibile aggiungere il nuovo nome di configurazione digitandolo nella proprietà build.

Nota: è anche possibile fare clic con il pulsante destro del mouse sul file di trasformazione web.config e selezionare la trasformazione di anteprima e assicurarsi che la configurazione di trasformazione funzioni correttamente.

si può anche dare il nome profilo di pubblicazione, se funziona correttamente int egli msbuild sezione argomenti

/p:DebugSymbols=false;DebugType=None;DeployOnBuild=true;PublishProfile=Stage