2009-03-25 10 views
38

Ho 3 soluzioni e la soluzione A richiede le versioni costruite delle DLL dalla soluzione B e C per la compilazione. non è possibile unirlo a una soluzione ...Come collegare più soluzioni di Visual Studio insieme?

Finora sembra che Visual Studio non supporti i riferimenti alle soluzioni e msbuild sia abbastanza intelligente da sapere che stai creando una soluzione da un'altra ecc. se provo in questo modo. L'obiettivo generale è cercare di far sembrare le soluzioni multiple come se ce ne fosse solo una - solo la soluzione A.

Credo che questo sia un problema comune, ma come si collega bene?

+0

Perché non riesci a unirli in un'unica soluzione? –

+0

Inoltre, perché non usi msbuild? – eglasius

+4

non possiamo metterlo in una soluzione in quanto i B e C sono utilizzati in più di un semplice A. durante dev è costruito proprio come vs build; se msbuild funziona meglio, per favore dì come! –

risposta

29

Questa domanda è stata visualizzata in different, ma related, moduli. C'è in realtà un MSDN page that covers this.

Quello che stai cercando è un approccio multi-soluzione simile al modello a una soluzione singola partizionata per sistemi più grandi. Avere una soluzione "tutto" che costruisce tutto e mantiene le tue dipendenze inter-componente. Questo è ciò che costruisci quando hai bisogno di costruire la soluzione A. Allora hai soluzioni separate che includono solo i componenti B o C.In sostanza, avrai ancora 3 soluzioni, ma si aggiungono i progetti di soluzioni B e C nella soluzione A.

+2

Ci sono anche problemi con questo modello. Ad esempio, TFS (-2012) non è ancora abbastanza intelligente da comprendere che se si rinomina un progetto nel contesto di una soluzione, è necessario aggiornare anche qualsiasi altra soluzione che include il progetto (il "riferimento" nel file sln).). Inoltre, nel mondo reale potresti utilizzare strumenti aggiornati (VS-2012) per la maggior parte delle cose, ma devi ancora sviluppare alcune parti della soluzione in un altro (ad esempio per BizTalk, non ancora possibile con VS-2012 afaik), in modo che la soluzione "tutto" non sia possibile. –

+0

In tal caso, è sufficiente passare a un modello completamente partizionato con un sistema di generazione personalizzato. :) Non è uno scenario insolito. –

3

Dovrebbe essere il livello di progetto che si sta guardando credo. Costruire i progetti contenuti in soluzione B e C e quindi aggiungere i riferimenti alle DLL nei progetti relativi a Soluzione A.

In MSBuild se si dispone di un gruppo di proprietà

<PropertyGroup> 

<SolutionsToBuild>SolutionB</SolutionsToBuild> 
<SolutionsToBuild>SolutionC</SolutionsToBuild> 
<SolutionsToBuild>SolutionA</SolutionsToBuild> 
</PropertyGroup> 

quindi eseguire il MSBuild Task

<MSBuild Projects="@(SolutionsToBuild)"/> 

Spero che questo aiuti

0

si potrebbe provare ad aggiungere riga di comando costruire comandi per la DLL (in soluzione B e C) si dipende in prebuild e prese d'aria dei tuoi progetti (in soluzione A)

0

Se non puoi mettere i progetti B e C nella stessa soluzione del progetto A, allora non c'è modo di accertarti di avere i binari per B e C contenenti il ​​codice sorgente più recente quando costruisci il progetto A.

La soluzione più semplice che ho visto è quella di avere una cartella comune nel repository del codice sorgente in cui ogni progetto copia i suoi binari se devono essere condivisi. Quindi tutti gli altri progetti possono fare riferimento ai file binari in quella cartella purché le cartelle locali abbiano lo stesso aspetto del repository.

Non è una soluzione perfetta, ma è piuttosto facile da lavorare.

0

È possibile aggiungere un progetto Makefile alla soluzione A che potrebbe creare le soluzioni B e C (utilizzando msbuild ad esempio) e rendere tutti i progetti in A dipendenti da tale progetto Makefile. In questo modo non sarai in grado di aggiungere riferimenti ai progetti in B e C, ma puoi usare i riferimenti alle DLL e verranno sempre creati dalle ultime fonti.

4

Ho scoperto di recente che in Visual Studio 2008 è possibile includere progetti esistenti in più soluzioni. L'unico svantaggio finora sembra essere che se apporti una modifica a un progetto condiviso e apri più soluzioni che utilizzano quel progetto condiviso ti verrà chiesto di "ricaricare" le altre soluzioni.

Quindi, solo "Aggiungi progetto esistente" a tutte le soluzioni che richiedono il progetto. Sto usando TFS sul mio sito attuale e sembra che non ci siano problemi con l'etere di controllo sorgente.

1

Si può cercare di automatizzare il processo di unione per risparmiare un po 'di tempo: http://code.google.com/p/merge-solutions/

Anche se abbiamo avuto un problema leggermente diverso: circa 15 soluzioni (circa 150 progetti in totale) che utilizzavano una libreria comune. Il problema era che se avessimo cercato di unirli tutti in uno per rifattorizzare/sterminare il codice ridondante dalla libreria comune. 1. la fusione di 15 soluzioni comporta un sacco di clic e in attesa in VS 2. portato soluzione non è mai stato fino ad oggi - nessuno si preoccupa di aggiornare a causa della sua dimensione

+0

Strumento freddo. Grazie! –

0

Secondo this answer, io ti consiglierei di creare il proprio file batch che costruirà le soluzioni pertinenti per voi.

Questo è molto utile da usare perché il processo di compilazione genererà la progressione della build (Simile alla finestra Output in Visual Studio) al comando promuovi per ogni esecuzione di build.

Inoltre, in un caso che è necessario costruire una soluzione prima l'altro, è possibile scrivere il proprio ordine di generazione, per esempio:

  1. soluzione accumulo B
  2. soluzione accumulo C
  3. accumulo soluzione A (che utilizza internamente file costruiti "soluzione B" e "soluzione C")

Ho scritto rapidamente script to clarify the build order mentioned above e supporto la maggior parte delle moderne versioni di Visual Studio.

Saluti.

+0

Oppure utilizzare [nant] (http://nant.sourceforge.net/) per specificare l'ordine di compilazione. Ogni build di soluzione potrebbe essere un'attività separata all'interno di un target. –