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.
Strano. Bene, questo ha risolto il mio problema! Avevo un profilo chiamato "Deploy" e il mio nome di configurazione era "Release". –