2012-03-07 19 views
24

Mi chiedevo: qual è la differenza tra l'utilizzo di msbuild e devenv durante la compilazione di soluzioni dalla riga di comando?MSBuild vs devenv per build da riga di comando

Una cosa ovvia che si è notato è che msbuild crea progetti dipendenti non contenuti nella soluzione, mentre devenv no.

Ci sono altri? Ci sono alcuni flag speciali che si possono passare a msbuild per farlo corrispondere esattamente alla build di devenv?

P.S. Sto usando Visual Studio 2010 SP1

+1

Dopo tutto devenv chiama msbuild per eseguire la build! –

risposta

9

Secondo questa MSDN Blog Entry cercano di minimizzare le differenze, ma quelle che esistono (ad esempio utilizzando un compilatore C# integrato invece di csc.exe o l'impostazione della proprietà BuildingInsideVisualStudio vengono principalmente utilizzate per ottimizzare le prestazioni dei build.

4

Ho sperimentato un progetto all'interno di un team multistrato: sviluppatori, tester, distribuitori. MSBuild era lo strumento principale dei deployer: potevano compilare e ricompilare, semplicemente impostando i parametri di costruzione modificando il file di configurazione xml di MSBuild senza aprire lo sviluppo. Infatti, spesso utilizzavano MSBuild in un ambiente pre-produzione in cui non esisteva affatto.

Nant è uno strumento simile di Apache Foundation.

Per ulteriori informazioni dare un'occhiata qui:

20

Il vantaggio principale di MSBuild è che non c'è bisogno di avere installato Visual Studio.

Una limitazione di MSBuild è che non supporta la costruzione di progetti di Visual Studio Setup (.vdproj).

(È possibile aggirare questo defining an exec task which calls devenv, ma poi è ancora necessario Visual Studio.)

4

Un'altra importante differenza è che msbuild ha alcune opzioni che non esistono per devenv. Per quanto posso dire, non c'è modo per aumentare la verbosità per devenv ma è possibile aumentare la verbosità per msbuild dall'opzione:

/v:diag 
1

ho incontrato un caso in cui devenv ha scritto un messaggio di errore quando un file progetto era mancante, ma restituito 0 comunque. Al contrario, msbuild ha restituito un valore diverso da zero. Ho sostituito il nostro makefile con msbuild per non trascurare gli errori.

Problemi correlati