Più applicazioni in una singola soluzione di Visual Studio [chiuso]


17

Sto lavorando per un'azienda che desidera riunire tutte le proprie applicazioni .Net (applicazioni Web, applicazioni Windows e applicazioni console) in un'unica soluzione Visual Studio.

Sto cercando l'esperienza di sviluppatori che strutturano le proprie applicazioni in questo modo o che lavorano in un'azienda che lo fa. E 'questa una buona idea?

  • Quali sono i pro / contro per mettere tutte le tue applicazioni in un'unica soluzione anziché avere soluzioni separate per ogni applicazione?

  • Quanto è veloce Visual Studio con una soluzione di oltre 20 progetti?

  • E quanto è stabile il file della soluzione con sviluppo simultaneo controllato dalla fonte?


Tieni presente che le risposte potrebbero essere specifiche per particolari versioni di Visual Studio.
stakx,

Risposte:


21

Di recente, abbiamo migrato quasi tutto il codice sorgente nella mia azienda in un'unica soluzione.

Perché?

Inizialmente avevamo decine di soluzioni. Alcuni progetti di una soluzione hanno riutilizzato progetti di un altro e nessuno si è preoccupato di utilizzare un gestore di pacchetti. Il giorno in cui cambi sostanzialmente un progetto che viene utilizzato quasi ovunque, ti aspetti ore e ore di lavoro perso per l'intera azienda per i prossimi giorni o settimane. La parte peggiore è che non puoi nemmeno sapere che cosa sarebbe esattamente influenzato dal cambiamento.

Unire tutto il codice in una soluzione era un'alternativa. Funziona bene per il momento e le dipendenze sono ora facili da seguire. Vuoi modificare un metodo ma anche tenere traccia delle ripercussioni che questa modifica potrebbe avere in qualsiasi punto della base di codice? Visual Studio può farlo facilmente. Per me è un successo.

Anche l'integrazione continua è ora più semplice. Una soluzione da compilare e distribuire. Quasi nulla da configurare.

È scalabile?

Per quanto riguarda le prestazioni, sono stato molto sorpreso da Visual Studio . Ho pensato che avrebbe iniziato a piangere con una soluzione, diciamo, 50 progetti. Oggi ci sono più di 200 progetti; Visual Studio sembrava essere abbastanza scalabile per gestirli come se ce ne fossero solo 20. Sì, ci sono cose che richiedono tempo. Se si ricompila ogni progetto, con contratti di codice, analisi del codice abilitata per impostazione predefinita, ecc., Si prevede che ci vorrà del tempo. Ma nessuno si aspetterebbe di compilare 200 progetti con una velocità pari a 10 e, a proposito, non dovresti: questo è il ruolo del server di integrazione continua. Il tempo di avvio (avvio a freddo, quindi caricamento della soluzione) è incredibilmente veloce ; forse non veloce come con 10 progetti, ma comunque molto accettabile (meno di 20 secondi su una macchina acquistata più di cinque anni fa).

Andare ancora oltre, scaricare sistematicamente progetti è una buona idea (e molto semplice quando i progetti sono organizzati in directory all'interno della soluzione). Se qualcuno lavora su qualcosa che richiede il caricamento di solo tre progetti, non è necessario caricare tutti i 200 progetti (a meno che, ovviamente, le dipendenze possano essere interessate).

Anche il controllo della versione funziona come previsto (sto usando un server SVN, se è importante). Non ho lavorato in un ambiente concomitante reale, con, diciamo, dozzine di sviluppatori che commettono spesso codice, ma immagino che questo non avrebbe troppi problemi. Fai attenzione ai casi in cui molti sviluppatori aggiungono nuovi progetti contemporaneamente: unire il file .sln non è la cosa più semplice da fare.

Conclusione

Se dovessi scegliere di nuovo la decisione:

  1. Vorrei comunque migrare tutto in un'unica soluzione. Ciò riduce enormemente il dolore delle dipendenze rotte e questo vantaggio da solo ne vale assolutamente la pena. Avere un posto centralizzato per tutto il codice è anche una buona idea; questo rende possibile, ad esempio, cercare qualcosa in Visual Studio. Posso anche lavorare su due progetti debolmente correlati e avere ancora una sola finestra di Visual Studio aperta.

  2. Vorrei anche studiare un po 'più NuGet e la capacità di ospitare un server NuGet privato. La gestione delle dipendenze tramite NuGet può risolvere alcuni dei problemi quando non si desidera unire alcuni progetti nella soluzione comune. Personalmente, non ho avuto casi del genere, ma immagino che potrebbero esserlo altre società.

  3. Infine, investire in un SSD per ogni sviluppatore può fare una grande differenza. Ma non è necessario, e nel mio caso, la base di codice è ancora memorizzata su un normale disco rigido.


2
Solo alcuni punti FYI: è anche possibile aprire progetti tramite il file .csproj in VS se la velocità / prestazioni è un problema. Un "server privato" NuGet è solo una cartella di rete (e aggiungi quella cartella come posizione di origine del pacchetto in VS) - rilascia lì i file nupkg e funziona.
Steven Evers,

Grazie, MainMa per aver condiviso le tue esperienze con un'unica soluzione; una risposta molto dettagliata e utile. Una riserva che ho è quella di avere tutte le applicazioni insieme in un'unica soluzione è di dare a uno sviluppatore junior l'accesso a tutto. Usiamo Ankhsvn e preferirei dare a uno sviluppatore junior l'URL per una singola applicazione su cui voglio che lavorino piuttosto che dargli accesso a tutto. Qualche idea su questo?
BruceHill

@BruceHill: con SVN, puoi configurare con precisione chi ha accesso a cosa. Lo sviluppatore junior sarà comunque in grado di vedere tutte le directory principali (vedere la mia domanda su Server Fault ), ma non sarà in grado di accedere a progetti con restrizioni.
Arseni Mourzenko,

2
Lavorando per alcune grandi aziende con grandi team di sviluppatori che si impegnano quotidianamente a scrivere codice, posso dirti che l'approccio a soluzione singola non funziona. Ogni progetto è sovraccarico. Caricare, costruire e dio sa quali passi pre / post costruire qualcuno potrebbe aver attaccato a tali progetti. Ora con un grande team di sviluppatori, ogni giorno avrai cambiamenti in molti di questi progetti. Includi i test unitari in esecuzione, ecc. Ad ogni check-in per l'integrazione continua e avrai quindi un sovraccarico ancora maggiore. Avere un'unica soluzione per unità distribuibile (servizio, sito Web) e utilizzare un gestore di pacchetti come NuGet.
Impara sempre il

8

Questo è l'uso previsto.

Quali sono i pro / contro per mettere tutte le tue applicazioni in un'unica soluzione anziché avere soluzioni separate per ogni applicazione?

  • professionisti:
    • riferimenti più semplici tra i progetti
    • debug / passaggio più semplice
    • più facile da collegare ai processi (ad es. stai passando attraverso un servizio Windows, quando passa al codice della libreria condivisa e funziona solo perché tutti i simboli sono già caricati e contabilizzati)
    • la ricerca del codice all'interno dell'ide funziona meglio (non devi necessariamente sapere in quale progetto risiede il codice che stai cercando)
    • le liste dei cambiamenti tra progetti sono più facili da gestire (ad es. hai modificato il codice della libreria, quindi devi aggiornare il codice client contemporaneamente, con 1 check-in)
  • contro:
    • velocità di costruzione: se hai l'abitudine di "ricostruire tutto", le costruzioni impiegano più tempo. Molto più a lungo, e le build incrementali a volte hanno un comportamento funky.
    • velocità ide: vedi dopo

Quanto è veloce Visual Studio con una soluzione di oltre 20 progetti?

Con oltre 20 progetti ... potrebbe non essere così male. Ho visto di più senza che VS abbia problemi. È abbastanza stabile / veloce. TUTTAVIA ... se è un problema, può essere mitigato: apri .csproj in VS e lavora da lì. Non si ottengono i vantaggi di avere tutto in un'unica soluzione, ma è sempre possibile riaprire lo sln quando è necessario e lavorare in .csproj quando è necessario (come si fa ora).

E quanto è stabile il file della soluzione con sviluppo simultaneo controllato dalla fonte?

Il file della soluzione cambia solo quando si aggiungono / rimuovono progetti o oggetti a livello di soluzione, quindi cambia raramente. È xml, quindi puoi vedere cosa c'è dentro. Cambiano raramente.


Steve, hai detto "Questo è l'uso previsto". Potete fornire un riferimento per questo? Grazie!
riformò il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.