34

Voglio ottenere trasformazioni web.config che funzionano localmente ma apparentemente le trasformazioni si verificano solo quando si eseguono le distribuzioni.Fare trasformazioni Web.config funzionano localmente

Qualcuno sa di un modo per eseguire la destinazione di msbuild "TransformWebConfig" senza passare attraverso il processo di "ricostruzione" e anche specificare e generare la directory dove sputare fuori il web.config trasformato?

EDIT: Usando la risposta di Sayed, ho creato un file .bat di fare eseguire l'attività per me:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config" 

il "Transformation.proj" è una copia del frammento di codice di Sayed nella risposta qui sotto. Basta specificare l'origine, la destinazione e la destinazione per la trasformazione. Il nuovo file, in questo caso, il "web.config" trasformato sarà nella directory "D: \ Demo". Sto semplicemente copiandolo per sovrascrivere il web.config del mio progetto e, infine, cancellando il file generato nella cartella "demo".

Inoltre, ho creato una macro per eseguire questo file batch ed eseguire la tranformation per me:

Public Module DoTransform 
    Sub RunTransformBatchFile() 
     Try 
      Process.Start("D:\Demo\RunTransform.bat") 
     Catch ex As System.Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 
End Module 

è anche possibile aggiungere un pulsante sulla barra degli strumenti per eseguire questo batch e/o assegnare un tasto di scelta rapida per eseguire.

risposta

34

se si desidera trasformare un file di configurazione senza utilizzare la pipeline di pubblicazione Web, è sufficiente utilizzare manualmente l'attività TransformXml. Ho scritto un post sul blog dettagliate su questo a http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx, ma qui ci sono le alte luci:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask TaskName="TransformXml" 
      AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 

    <Target Name="Demo"> 
     <TransformXml Source="app.config" 
         Transform="Transform.xml" 
         Destination="app.prod.config"/> 
    </Target> 
</Project> 

Qui trasformo manualmente il file utilizzando il file app.config transform.xml e il file di destinazione è app.prod. config.

Una cosa che hai menzionato è stata la possibilità di eseguire la trasformazione localmente durante l'esecuzione dell'app. Il motivo per cui eseguiamo la trasformazione solo su pacchetto/pubblicazione è perché se abbiamo trasformato web.config stesso, la volta successiva che esegui il debug della tua app, web.config viene nuovamente trasformato. Ad esempio, se nel tuo web.debug.config hai la trasformazione per aggiungere un valore a config, tutto è OK la prima volta che lo aggiungi, ma la prossima volta che esegui/esegui il debug della tua applicazione verrà aggiunto di nuovo. Quindi è meglio evitarlo.

+0

Questo è esattamente quello che mi serviva, trasformare il web.config senza costruire. grazie mille! –

+0

Hai detto, potresti conoscere questa risposta a questa altra domanda? http://stackoverflow.com/questions/2915329/advanced-tasks-using-web-config-transformation –

+0

Sì, lo so per caso, ho appena risposto. –

2

Se si utilizza Visual Studio 2015, è possibile fare clic con il pulsante destro del mouse sulla trasformazione dell'ambiente desiderato e fare clic su "Visualizza anteprima" ... Quindi verrà creata la trasformazione e sarà possibile copiarla e incollarla nel normale file Web.config per scopi di debug. Basta non commetterlo!

Se si utilizza Visual Studio 2013, è possibile installare lo SlowCheetah - XML ​​Trasforma estensione

Problemi correlati