2014-06-27 14 views
7

Sto cercando di pulire e ricostruire un file di soluzione con più progetti dalla riga di comando utilizzando MSBUILD. Per qualche motivo la mia compilazione fallisce (circa il 10% dei progetti creati fallisce) e ottengo più errori che sembrano tutti:Creazione di Visual Studio riuscita, MSBuild non riesce

errore CS0234: Il nome o lo spazio dei nomi 'foo' non esiste nello spazio dei nomi 'bar' (ti manca un riferimento all'assemblaggio?)

Ora, se pulisco e ricostruisco lo stesso file di soluzione da Visual Studio 2010 con le stesse identiche configurazioni, verrà creato correttamente senza errori.

C'è una differenza nell'installazione o configurazione di MSBuild da Visual Studio che deve essere modificata di cui non sono a conoscenza?

risposta

1

Prova a controllare i percorsi dei riferimenti che MSBuild non riesce a trovare nel file di progetto della libreria non dell'edificio. A volte quando si utilizza VS o ReSharper per aggiungere automaticamente un riferimento, il percorso finisce nella directory \ obj. VS sembra in grado di farcela, ma MSBuild non così tanto.

+1

Sono stato in grado di individuare il problema. MSBuild fallisce solo quando si fa la build su ambienti a 64 bit, sono in grado di creare con successo su macchine a 32 bit. Mi sono assicurato di utilizzare MSBuild.exe nella directory C: \ Windows \ Microsoft.NET \ Framework64 anziché nella directory regolare di Framework. Ora devo solo capire cosa cambiare per rendere i progetti che non sono compatibili per 64-bit –

2

Ho appena avuto a che fare con questo problema e si scopre che a msbuild piace muovere i binari compilati nella directory binari \ release e fare riferimento a quelli invece dei progetti stessi quando costruisce cose. Dopo averlo creato, copia i file in questa directory. Questo spiega perché funziona in Visual Studio e non in msbuild (attualmente sto usando TFS 1010).

Nel mio caso ho avuto una vecchia versione binaria di una DLL a cui fa riferimento un progetto che è stato costruito dopo quello che avrebbe dovuto generare il file corretto. Quella vecchia (binaria) sovrascriveva quella nuova (creata dal sorgente) poiché la soluzione che faceva riferimento a quella binaria era in fase di costruzione in seguito nella compilazione.

0

Nel mio caso ho avuto un PCL che fa riferimento a un altro PCL con target diversi. Visual Studio mi ha mostrato un avvertimento nell'elenco dei riferimenti della prima libreria, ma ha compilato la soluzione, mentre MSBUILD si è rifiutato di compilare. Ho risolto il problema reindirizzando il PCL. Spero che questo aiuti qualcuno.

1

Presumo che ci sia una differenza nel modo in cui il progetto è stato creato, perché Visual Studio non esegue MSBuild, poiché ospita piuttosto il motore di compilazione stesso. Risponde allo here.

Tuttavia, ho avuto un problema simile.

Nel mio caso, il progetto ha fatto riferimento a una libreria esterna, che è stata inserita nella directory figlio del progetto, chiamata sfortunatamente "pacchetti".

Dopo aver eseguito MSBuild, il contenuto della cartella è stato eliminato, presumibilmente per essere scaricato nuovamente da Nuget.

La soluzione ovvia era quella di rinominare la cartella e ha funzionato.

Problemi correlati