2012-06-07 17 views
6

Sul mio computer portatile di sviluppo ho installato solo VS2012 RC e riesco ad agganciare con successo il nuovo plumbing .pubxml di MSDeploy (impostazioni DeployOnBuild e PublishProfile) da powershell (tramite psake) per distribuire il mio sito Web al nostro server di test.Come si controlla quale versione di un file msbuild viene utilizzata tra .NET4 e 4.5RC?

Tuttavia, sul mio server di build, inizialmente avevo installato VS2010 SP1 e ora ho in aggiunta installato nel 2012 RC (ho altri build su questa macchina che sono ancora .NET 4).

Quando si esegue lo stesso script con esattamente gli stessi parametri, vedo risultati diversi tra la mia macchina di sviluppo e il server di compilazione. Il comando sto correndo è

exec { msbuild "Website\WebSite.csproj" /m p:DeployOnBuild=True /p:PublishProfile=MyTestProfile } 

Sul server di build, questo non lo fa infatti grilletto MSDeploy, ma semplicemente i bit di confezionamento che zip il sito attivo e rende un pacchetto di distribuzione. La mia macchina seleziona con successo il file pubxml e fa una distribuzione di successo.

Eventualmente, credo di aver rintracciato il problema nel file Microsoft.Web.Publishing.targets. Sulla mia macchina dev ho solo

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

ma il server ha inoltre

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

e sembra che questo file (senza la conoscenza delle cose .pubxml) è quello che viene utilizzato lì.

Qualcuno ha idea di cosa ho bisogno di twiddle (preferibilmente all'interno dei miei file msbuild in modo da non rovinare altro sul server di build per le build 4.0) per ottenere msbuild per raccogliere la versione v11.0 del file e quindi utilizzare il mio file .pubxml?

risposta

12

Questo è interessante dovrebbe essere l'ultima (v11.0), sembra che ci sia un bug qui. Questo è controllato dalla proprietà MSBuild VisualStudioVersion.

Ecco le regole per come questo valore viene compilato in fase di compilazione. 1. Se VisualStudioVersion è definito come una variabile di ambiente o una proprietà globale (ad esempio/p: sulla riga di comando) che vince. Ecco come Dev11 & il prompt dei comandi Dev11 è sempre v11 - entrambi definiscono VSV come variabile di ambiente 1. Altrimenti, se c'è un sotto-set di strumenti che corrisponde alla versione della soluzione equivalente (che è attualmente sempre in formato file - 1) , scegliere quello 1. Altrimenti, ottenere la versione predefinita; 10.0 se Dev10 è installato, versione di sub-toolset con la versione più alta installata (attualmente sempre 11) altrimenti

Nel caso in cui si stia riscontrando un problema, è possibile passare nella proprietà /p:VisualStudioVersion=11.0 per assicurarsi che vengano utilizzati gli obiettivi corretti.

+0

Grazie, passando VisualStudioVersion = 11.0 lo ha risolto. Sarebbe utile se fornissi/v: Output diagnostico da entrambe le macchine senza il flag in modo da poter meglio determinare se si tratta di un bug reale o qualcosa che sono riuscito a infrangere sul mio server? –

+1

Detto, sembra che lo stesso stia succedendo con VS2013. Ho eseguito questo sul mio server di build e ho dovuto passare = 12.0 per i target Azure giusti per essere prelevati ... –

+0

Ho delle regole personalizzate per l'analisi del codice e le ho costruite contro VS2013 dopo aver aggiornato la soluzione 2 settimane fa. Su tutti i client tutto sta andando bene fino a quando non ho fatto un build CI. Ho aggiunto il parametro /p:VisualStudioVersion=12.0 al build CI e tutto andava bene di nuovo.Utilizziamo un server di compilazione SP1 TFS2010 e client RTM VS2013 –

Problemi correlati