2012-07-22 14 views
8

Mentre eseguivo il refactoring dei nostri progetti e dei file di soluzione, ho separato alcuni file .sln per contenere meno progetti.Aggiunta di un projectRiferimento a un progetto che non si trova nella stessa soluzione

Occasionalmente ho bisogno di fare riferimento ad alcuni progetti esterni all'ambito del file .sln corrente.

Ad esempio, il mio stato iniziale è stato questo:

SOLUZIONE A

  • PROJ Un
  • PROJ B

Dopo refactoring sarebbe simile a questa:

SOLUZIONE A_NEW

  • PROJ Un

SOLUZIONE B_NEW

  • PROJ B

La mia domanda è - E 'possibile aggiungere un ProjectReference nodo a un progetto che non è definito nella stessa soluzione VS? (nel mio caso, avere PROJ A avere un riferimento al progetto PROJ B).

Inoltre, se possibile, è consigliabile?

So che questo non è possibile da VS IDE, solo modificando manualmente il file .csproj.

risposta

11

Non è possibile farlo. Un riferimento al progetto include un GUID identificativo per il progetto di riferimento, che viene mantenuto nel file della soluzione per tracciare le opzioni e le dipendenze di creazione della soluzione. Se si tenta di fare riferimento a un progetto che non è nella soluzione, Visual Studio si lamenterà.

È possibile aggiungere un riferimento file di al assemblaggio prodotto da un progetto che non è nella soluzione, naturalmente.

AGGIORNAMENTO: Poiché questo è stato downvoted, affinerò la mia risposta.

Sebbene sia tecnicamente possibile creare un file di progetto che faccia riferimento a un altro progetto al di fuori della stessa soluzione, Visual Studio non ti aiuterà a farlo facilmente. Una buona ragione per cui è una cattiva idea fare questo (che ho osservato) è che qualunque soluzione di configurazione e piattaforma che stai costruendo (il progetto di riferimento) verrà ignorata se MSBuild decide di creare il progetto di riferimento - la configurazione predefinita e verrà utilizzata invece la piattaforma specificata nel file di progetto di riferimento. Così si può finire con una miscela di tipi binari in diverse cartelle.

+0

Cosa c'è di tanto difficile per la soluzione A, fare riferimento a una classe di un progetto all'interno della soluzione B digitando un progetto di soluzione A: utilizzando ClassOfThatProjectB ?? – user3800527

+0

Sfortunatamente Visual Studio ti avviserà solo sull'aggiunta di un nuovo riferimento, ma non durante il caricamento di una soluzione. Questo porta alla situazione in cui - se si utilizza lo stesso progetto in più soluzioni con "varianti leggere" per risparmiare sulle risorse Intellisense - Visual Studio non si lamenterà mai di riferimenti già morti. In effetti, Visual Studio stesso ignora semplicemente i riferimenti che puntano al di fuori della soluzione, mentre MSBuild li seguirà. – Ext3h

0

È può sicuramente aggiungere un progetto per una soluzione A che è in soluzione B. C'è nessun problema con quello. Dalla mia esperienza, non è qualcosa che di solito ho fatto o fatto, ma a volte ho bisogno di farlo. Questo può essere particolarmente vero su progetti di grandi dimensioni in cui sono necessari nodi diversi della propria architettura per riutilizzare lo stesso codice base.

Spero che questo aiuti.

+0

La mia domanda era: posso aggiungere un riferimento al progetto A (ProjectReference) al progetto B, se non sono contenuti nella stessa soluzione? –

+0

@ acido lisergico: no non puoi. È possibile aggiungere una 'DLL', o il progetto che è già nella soluzione. Ma perché non includere semplicemente il progetto nella soluzione? Qual è un problema, in realtà? – Tigran

+0

il problema è che sto cercando di creare un file di soluzione più "a grana fine", invece di includere tutti i riferimenti in esso. –

2

Aggiungere temporaneamente il progetto alla soluzione, aggiungere un riferimento ad esso, scaricare il progetto che ora ha un riferimento aggiunto ad esso, rimuovere il progetto di riferimento, ricaricare il progetto con il riferimento.

Se non si scarica il progetto, il riferimento verrà rimosso automaticamente da Visual Studio quando il progetto di riferimento viene rimosso.

Come probabilmente si può dire, Visual Studio non è progettato per fare questo e sarebbe meglio definire un ordine di costruzione per le soluzioni e utilizzare i riferimenti di assembly, invece.

Problemi correlati