2011-02-10 8 views
38

Ho un'applicazione Web MVC2 di Visual Studio 2010 che sto creando tramite la riga di comando utilizzando Hudson. Mi piacerebbe che Hudson pubblicasse un output web, quindi ho aggiunto DeployOnBuild = true e CreatePackageOnPublish = True tags alla mia riga di comando.MSBuild DeployOnBuild = true non publishing

è il mio comandamento:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
    /target:Clean,Build 
    /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
    [my project name.csproj] 

Eseguendo questo comando sulla mia macchina di sviluppo (Windows 7) pubblica con successo un'uscita Web per \obj\Debug\Package\PackageTmp\. Ma eseguirlo sul server Hudson (WS 2008) viene compilato correttamente, ma non viene pubblicato. Stesso comando, stessa versione di MSBuild, stesso codice sorgente.

Ho provato il target /t:Publish, che mi dà una risposta di Project ignifuga a capo, come ho visto su molti altri post di altre persone.

Ho provato ad aggiungere i tag DeployOnBuild=True e CreatePackageOnPublish=True anche al mio file di progetto e nessuna modifica.

Qualche idea sul perché questo non è editoriale? Sto usando questi tag in modo errato? Sono sicuro che qui c'è qualcosa che non vedo.

+2

Hai mai capito questo? Sto colpendo lo stesso muro in questo momento. –

+0

Ho spostato TeamCity su un nuovo server e tutti gli artefatti delle app Web sono state le cerniere emtpy per oltre 50 progetti. I servizi normali e le app di test sono state ben congegnate .. abbiamo provato a risolvere questo problema esatto per oltre 24 ore ( – ppumkin

risposta

37

Supponendo che fai non disporre di Visual Studio 2010 installato sul server di Hudson, allora può essere che ti manca il file di pubblicazione "bersagli". Dopo un sacco di sbattere frontalmente, finalmente ho risolto questo.

Per un bel po 'ho saputo che avevo bisogno di copiare la directory

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ applicazioni web

dalla mia macchina locale con VS2010 al mio server per ottenere il progetto in build. Ma per ottenere il progetto anche pubblicare avevo bisogno di copiare anche all'interno di una directory

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web

Nota: nel mio caso in realtà sto trasferendo tali cartelle al mio controllo sorgente e modificando il valorenel mio file csproj in modo che punti a queste cartelle ritirate (quindi c'è un passo in meno durante la preparazione di un server). Questo non è necessario per farlo funzionare, ma potresti volerlo considerare dopo aver risolto il problema.

AGGIORNAMENTO: Dopo aver eseguito quanto sopra, la build ha lamentato che non è stato possibile trovare "Microsoft.Web.Deployment.dll". Per risolvere questo ho bisogno di installare Microsoft Web Deploy v2.0 sul server anche se sto solo pubblicando sul file system. Immagino di poter vedere la logica in questo.

AGGIORNAMENTO: Ho scoperto che l'installazione di "Visual Studio 2010 Shell (Integrated)" tramite IIS Web Platform Installer installa i target di compilazione richiesti. Questo sembra un buon compromesso tra non avere l'intera applicazione di Visual Studio installata sul tuo server e non copiare manualmente cartelle apparentemente arbitrarie sul tuo server dalla tua macchina di sviluppo.

+1

Già fatto questo, e sto ancora ottenendo gli stessi risultati. DeployOnBuild è ancora ignorato. –

+0

Ho provato il RC 3.0 di Web Deploy e ho funzionato come un incantesimo! Grazie –

+0

L'aggiornamento non è più valido: l'installazione di VS 2013 Shell (integrata) NON fornisce la cartella "Web" richiesta sotto l'installazione di MSBuild. –

3

Sembra che le condizioni per eseguire il target di pubblicazione non siano soddisfatte.

1) Si può avere diversi percorsi di pubblicazione

2) Condizione per eseguire pubblicare obiettivo è falso

Per verificare ciascuno di essi chiamano vostro comando con la bandiera /v: diag. Cerca per Scegli "Pubblica" e cerca di capire cosa succede veramente. Sarà sembra

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj": 
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files. 
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild 
Output files: D:\App\App.exe\\App.config 
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144) 
+1

Grazie per l'idea di/v: diag. Penso che ci stiamo avvicinando Non sembra come il bersaglio "Pubblica" viene colpito anche quando la distribuzione del pacchetto ha successo.La prima indicazione di qualcosa di diverso tra i due output è che sulla macchina che funziona, vengono menzionate le seguenti impostazioni, molto vicino all'inizio del uscita: _CreatePackage = true _DeployOnBuild = true _PackageTempDir = obj \ Debug \ Package \ PackageTmp Prima di questo, non ci sono differenze significative tra le due uscite Tutte le idee sulle condizioni per colpire queste impostazioni – Thomas

+0

/v:.? diag sicuramente aiuto mi avvicino al problema ... – Ewert

1

Era in corso con VS2012 - ha finito per installare gli strumenti di sviluppo Web sul server di generazione e che l'ha risolto.

+4

che cosa sono esattamente gli strumenti di web develoepr di cui stai parlando? – iwo

+0

Sono gli strumenti di sviluppo web nel menu di installazione di VS presumo –

1

In seguito alla risposta di Brian Hinchey, ho scoperto che dovevo anche aggiungere la mia chiamata batch in msbuild con il parametro aggiuntivo VisualStudioVersion in modo che la versione e il percorso corretti sull'agente di build (TeamCity nel mio caso) su Microsoft.WebApplication .target verrebbe chiamato. Senza questo parametro il passaggio di distribuzione e pubblicazione sul Web non è stato completato e il mio batch è stato completato con successo con un codice 0 restituito rendendo l'analisi molto difficile, anche con il flag/verbosity aggiunto a "debug" del build. Questo punto è fatta da SAYED IBRAHIM Hashimi sul suo sito: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

Lo scenario per il mio caso era che avevo la compatibilità di Visual Studio attivato sul mio progetto web MVC in modo da poter aprire il progetto in VS2010 o 2012 (come note di Sayed nel link precedente) - quindi sto sviluppando localmente in VS2012 mentre l'agente di build di TeamCity ha gli obiettivi di generazione e distribuzione Web di VS 2010.

Problemi correlati