5

Ho una soluzione con oltre 100 progetti. Richiede molto tempo per la compilazione e talvolta Visual Studio si arresta in modo anomalo durante la compilazione. Come posso affrontare questo problema e minimizzare il dolore? Siamo andati in modo orribile, orribilmente sbagliato da qualche parte?La soluzione con oltre 100 progetti richiede più di cinque minuti per creare

Alcuni retroscena sul problema:

Stiamo usando CAB con WPF, e ogni modulo ha un assemblaggio ui e un montaggio "server", che è in realtà solo un layer per il database. C'è solo un team, con circa 5 sviluppatori.

Non so quante classi o quante righe di codice.

+1

Perché non usi le sue alternative da riga di comando? – vpram86

+2

Quante classi per progetto? Quante righe di codice sono totali? Quanti sviluppatori/team? Con quale frequenza cambiano i progetti (alcuni possono essere pre-costruiti)? – ChrisW

+7

Cosa c'è di sbagliato nel prendere 5 minuti per ricostruire 100 progetti? La costruzione non dovrebbe durare quanto ricostruire. –

risposta

9

La tua domanda è un po 'a corto di dettagli, ma immagino che l'arresto anomalo sia più che altro un problema di risorse di workstation. 100 progetti non sono di per sé un problema finché ci sono buone ragioni per averne tanti, ma quando arriverai a più di 10 progetti, mi auguro che tu abbia una sorta di struttura gestionale per loro.

Hai davvero bisogno di costruire tutti i 100 progetti, tutto il tempo? È possibile disattivare singoli progetti per la creazione utilizzando il Configuration Manager ed è possibile creare file di soluzione con un sottoinsieme del numero totale di progetti.

Ad esempio, abbiamo 36 progetti per una delle app aziendali con cui lavoro. Insieme a questo, abbiamo diversi file di soluzione e configurazioni progettati per consentire ai nostri sviluppatori di caricare solo i progetti e la configurazione di cui hanno bisogno per lavorare con determinati sottocomponenti dell'applicazione. In altre parole, caricano sempre solo alcuni sottoinsiemi dei 36 progetti. Il nostro server di build si occupa di mettere tutto insieme.

Suggerisco di fare alcune analisi sulla vostra applicazione e di scoprire cosa è possibile consolidare e cosa è possibile suddividere in altri file di soluzione.

+0

E le valutazioni delle dipendenze richiedono più tempo, maggiore è il numero di progetti che si hanno in una soluzione: questo è un luogo in cui è possibile avere più soluzioni o configurazioni. Abbassa il registro dei messaggi per segnalare solo gli errori: le scritture della console rallentano un po 'le cose. – DaveE

+0

Puoi approfondire le valutazioni delle dipendenze? – MedicineMan

+0

cosa succede se qualcuno cambia una firma di un componente condiviso? Non causerà un errore di build nella tua soluzione perché non hai tutti i progetti caricati al momento. – MedicineMan

1

È possibile fare clic con il pulsante destro del mouse su un singolo progetto in Esplora soluzioni e selezionare l'opzione per creare solo quel progetto. Se sono presenti progetti necessari nell'ordine di costruzione, verranno creati anche quelli, ma ciò consente di creare solo gli elementi necessari.

2

Hanno tutti bisogno di costruire allo stesso tempo? In caso contrario, è possibile accedere allo Configuration Manager e selezionare solo quelli che è necessario creare al momento.

Anche se mi sembra che 100 progetti in una soluzione siano un bel po '. E 'davvero necessario? Puoi suddividerlo in soluzioni più piccole, o ci sono davvero tanti progetti che sono interdipendenti l'uno dall'altro?

+0

Il problema è che gli sviluppatori potrebbero cambiare le firme quando non dovrebbero. I progetti non caricati nella loro soluzione personalizzata non verranno quindi creati. Presumo che questo possa essere gestito con un'integrazione continua, ma non siamo ancora arrivati ​​a questo punto. – MedicineMan

3

La tua domanda sembra avere più a che fare con il design della tua soluzione e meno sulla capacità di VS di gestire 100 progetti. Vuoi davvero sapere se il fatto che la tua soluzione richieda molto tempo è un odore di codice per "santa merda che abbiamo progettato così male".

Se si dispone di una relazione 1: 1 tra le assemblee "ui" e assiemi "Server", sono logicamente lo stesso e potrebbe essere combinati.

Va bene per i gruppi di moduli CAB/CAG avere tutte le loro dipendenze in un assieme a mio parere. Se si intende condividere il codice di accesso ai dati tra più moduli, sarebbe opportuno suddividerlo in un assembly separato.

Se si decide di questo approccio non è appropriato, quello che facciamo di solito è avere parecchie soluzioni più piccole che ci permettono di testare alcuni dei relativi moduli insieme a livello locale durante lo sviluppo, ma hanno una grande soluzione che la nostra generazione i server creano out. In questo modo, i tempi di costruzione lunghi sono sperimentati da una macchina di compilazione dedicata, piuttosto che dai nostri box di sviluppo locale (questo è un buon approccio anche per i progetti più piccoli).

+0

Penso che tu abbia ragione-- Penso di chiedere una domanda sull'odore del codice. Non me ne sono nemmeno reso conto fino ad ora. – MedicineMan

+0

Posso dirti un'altra cosa. Se i moduli non sono autonomi (ovvero se non è possibile eliminarli e la shell e tutti gli altri moduli continuano a essere caricati), allora non sono moduli progettati correttamente. I moduli dovrebbero essere il più indipendenti possibile. Ci sono momenti in cui ModuleDependencies sono appropriati, ma dovrebbero essere pochi e distanti tra loro. –

0

Le configurazioni di soluzione predefinite Debug e Release controllano sempre tutti i progetti e creano quelli non aggiornati. È possibile creare la propria configurazione della soluzione in cui si disabilita l'opzione di compilazione per progetti che non è necessario controllare.