2013-07-17 13 views
5

Sto provando a distribuire un progetto di due siti Web in una soluzione di Visual Studio 2012 tramite TFS come parte di una build. Siamo al punto in cui disponiamo di due server Web diversi, WIP (lavori in corso) e DEV.TFS/MSBuild build/publish web deploy non trasforma i file web.config

Vogliamo distribuire diverse stringhe di connessione su entrambi i server in modo che possano connettersi a diversi database. Abbiamo testato la nostra soluzione su una macchina di sviluppo con Visual Studio e per tutte le configurazioni, quando un progetto web è pubblicato, la stringa di connessione web.config viene trasformata come previsto quando controlliamo il web server.

La build funziona correttamente sul server WIP che utilizza la configurazione predefinita della soluzione di debug. La configurazione in TFS Build è Any CPU | Debug.

Per la configurazione successiva (DEV), siamo sicuri che i progetti Web pubblicano entrambi tramite Visual Studio 2012 per i server Web e che i file web.config si trasformino.

Tuttavia, quando eseguiamo la build DEV utilizzando gli argomenti MSBuild, notiamo che non avviene alcuna trasformazione. Abbiamo inviato la configurazione nella sezione Elementi da compilare del build su: Qualsiasi CPU | Dev.

/p:VisualStudioVersion=10.0 /p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml /p:DeployTarget=MsDeployPublish /p:MsDeployServiceUrl=https://server-dev-hrtech:8172/MSDeploy.axd /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC /p:AllowUntrustedCertificate=True /p:Username=username /p:Password=password /p:_WPPCopyWebApplication=True /p:PipelineDependsOnBuild=False 

Quando guardiamo le directory di registro e output di compilazione - possiamo vedere assembly compilati nella directory obj/Debug e non la directory obj/Dev come credevamo. Nei log, possiamo chiaramente vedere /p:Configuration="Dev" come ci aspetteremmo.

La riga di fondo è la web.config pubblicata che termina sul server Web è il file web.config predefinito dalla configurazione Debug (ovvero non trasformato). È come se MSBuild non fosse in grado di vedere il parametro di configurazione passato negli argomenti per la soluzione.

Ora ho provato a eseguire msbuild dalla riga di comando sulla mia macchina di sviluppo per cercare di capire perché ciò accadrebbe.

Eliminando indietro i parametri di MSBuild che vengono inviati tramite la compilazione TFS, posso vedere che questo non trasforma la configurazione web:

msbuild "app-no database.sln" /t:app_ui:Rebuild /P:TransformConfigFiles=true /p:Configuration=Dev /p:Platform="Any CPU" /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 > build.log 

posso modificare questo e utilizzare MSBuild per costruire il file di progetto direttamente. Ho scoperto che il comando di sotto non trasformare il file web.config per l'applicazione pubblicata:

msbuild app.ui\app.ui.csproj /p:Configuration=Dev /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 /p:AllowUntrustedCertificate=True > build.log 

Il problema è questo sarebbe difficile da eseguire come parte di un TFS costruire dove sono più progetti cui alcuni per i siti web e altri per server Windows, ecc.

Come posso utilizzare il primo comando, ma modificarlo in modo da trasformare correttamente il progetto web?

Come si può vedere, ho creato alcuni profili di pubblicazione, quindi potenzialmente possono essere utilizzati anche negli argomenti di MSBuild in TFS Build.

PS: stiamo utilizzando Visual Studio     2012, TFS 2010, Windows 2008R2 per i server e Windows 7   per macchine di sviluppo.

risposta

0

Sembra che TFS 2010 Build non chiami il Trasforma Attività di MSBuild per impostazione predefinita. È necessario modificare la definizione della build TFS per aggiungere una nuova attività che la chiama o modificare il file di progetto per farlo.

Stack Overflow questione TFS Build not transforming web.config as expected dovrebbe aiutare con l'aggiunta del nuovo post del blog e acitivty Integrating Web Config Transformations with TFS Build per apportare modifiche al file di progetto.

1

Ho riscontrato questo problema, relativo a come pubblicare un sito Web tramite il file di profilo di pubblicazione, questo article è il migliore che abbia mai visto.

Per il tuo caso, sembra che devi rendere il nome del profilo uguale al nome della configurazione, ad es. utilizzare Dev.pubxml e Web.Dev.config.

+0

Strano. Bene, questo ha risolto il mio problema! Avevo un profilo chiamato "Deploy" e il mio nome di configurazione era "Release". –

0
/p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml 

Non penso che .pubxml dovrebbe essere alla fine del profilo. dovrebbe essere come questo

/p:DeployOnBuild=True;PublishProfile=app.ui.dev 
0

Ho appena avuto questo problema. Controllato i log di MSBuild, controllato facendo un pacchetto ZIP locale, controllato il push di Web Deploy su IIS remoto e usava sempre il file di configurazione di default!

Si è scoperto che il grumo di XML che stavo osservando per verificare le mie impostazioni di QA mancava dell'attributo xdt:Transform="Replace"!

Spero che questo aiuti qualcuno.