27

Ho creato 2 progetti fittizi nella mia applicazione e li ho denominati BAL e DAL. Quando li costruisco, costruiscono con successo. Se aggiungo un riferimento a al progetto DAL, è stato aggiunto in modo corretto. Ma mentre l'aggiunta del riferimento al progetto DALBAL, ottengo il seguente errore:Impossibile aggiungere un riferimento al progetto a causa di un errore di dipendenza circolare

A reference to DAL could not be added. Adding this project as a reference would cause a circular dependency.

qualcuno mi può aiutare a risolvere questo errore?

+2

Basta provare alcune delle prime voci in una rapida ricerca su Google. http://en.wikipedia.org/wiki/Circular_dependency. Buona spiegazione in un'altra domanda su SO all'indirizzo http://stackoverflow.com/questions/308915/why-are-circular-references-in-visual-studio-a-bad-practice –

risposta

8

È possibile fare riferimento solo in un modo, altrimenti si ottiene l'errore come hai detto. Basta fare questo: eliminare il riferimento dal tuo DAL al tuo BL e crearne uno nuovo dal tuo BL al tuo DAL!

+0

Vorrei aggiungere i riferimenti per entrambi per il mio codice – Venkat

+6

Utilizzare un livello comune rispetto a ... Più specifico: aggiungi un nuovo livello nel progetto chiamato comune e quindi inserisci i tuoi oggetti di business in questo livello. Ora puoi fare riferimento a questo livello in tutti i tuoi livelli BL e DAL. – jefsmi

+0

Aggiungo solo che creo solo 2 nuovi progetti, ma sto ricevendo il problema – Venkat

2

Ciò causerebbe una dipendenza circolare. Quello che forse vorresti fare invece è avere un progetto applicativo principale, che fa riferimento al BAL, e quindi BAL referenes DAL. L'accesso ai dati non deve essere necessario fare riferimento alla logica aziendale.

10

È implicito nel concetto di "strati" che gli strati superiori dipendono da quelli inferiori, e non viceversa. Se 2 "strati" sono mutuamente dipendenti, allora uno non è più alto dell'altro, non sono strati in alcun senso significativo, e quindi possono essere considerati nello stesso livello. Lo stesso principio di base vale per componenti o moduli architettonici, come imposto da Studio per le dipendenze del progetto. Se utilizzi questo principio, pensa ai tuoi progetti come moduli di progettazione anziché ad es. semplicemente buttando tutto in un unico progetto: avrai una base di codice ben strutturata che ti darà meno problemi man mano che si ingrandirà.

+22

-1 come non ho ancora idea, dopo aver letto la tua risposta, come fare VS fare quello che mi serve. –

+1

-1 in quanto questo non ha risposto alla domanda dell'utente o me stesso, che sta avendo la stessa situazione. – SnapJag

+3

Si fa un punto molto valido, tuttavia non è sempre possibile riscrivere semplicemente una base di codice enorme che si è ereditata e che sembra essere scritta male. – ElGavilan

-6

Per aggirare questo problema, aggiungere il riferimento sfogliando la DLL dei progetti dopo che è stata creata. Non selezionarlo dalla scheda "Progetti".

+5

Aggiungere un riferimento a una DLL nella directory bin di un altro progetto è in genere una cosa molto brutta, specialmente se i progetti si trovano nella stessa soluzione e hai un server di build impostare. Causerà mal di testa – TrueWill

+4

Le dipendenze circolari tra i progetti sono una pessima idea e forniranno build non riproducibili. Ogni volta che si crea, si farà riferimento alla DLL dalla build precedente. –

23

Ecco cosa dovete fare:

  1. Fare clic destro sul Progetto DAL nella soluzione Explorer e selezionare dipendenze di progetto nel menu contestuale.

  2. Verrà ora visualizzata una finestra che mostra le dipendenze del progetto DAL Project. Assicurarsi che BAL non sia selezionato.

Ora si dovrebbe essere in grado di aggiungere il vostro riferimento ...

Spero che questo aiuta Ho cercato di mantenere il più semplice e diretto possibile.

Spiegazione:

tuo DAL non dovrebbe essere in grado di accedere al BAL. Le dipendenze di riferimento codice dovrebbe essere simile a questo:

progetto MVC -> BAL -> DAL

Il progetto MVC dovrebbe fare riferimento al BAL, il BAL dovrebbe fare riferimento al DAL. Imposta il tuo progetto in questo modo. Fallo funzionare e quindi capirai meglio perché questa configurazione è migliore.

Attribuite:

  1. dati = numeri grezzi e stringhe
  2. Informazioni = dati trattati in qualcosa di significativo

Cosider ° e seguente: L'interfaccia utente dovrebbe ottenere le informazioni dal BAL che potrebbero essere in grado di comporre il suo dati in base al DAL.

1

Mi è appena successo. Hai una dipendenza circolare, cioè due progetti che si riferiscono entrambi. Devi renderne uno indipendente dall'altro. Ci vuole un po 'di tempo e succede così in fretta. Un secondo che stavo codificando felicemente, e il prossimo ho avuto 45 errori come questo. Ci ho messo solo un po 'di tempo, ma anche la tua architettura/struttura del programma migliora, aiutandoti a risolvere correttamente le dipendenze.

0

Nel mio caso ho copiato un file di progetto senza generare un nuovo ProjectGuid. Poiché Visual Studio identifica in modo univoco i progetti utilizzando lo ProjectGuid, si presuppone che il progetto stia cercando di fare riferimento a se stesso.

0

Questo problema si è verificato durante la creazione di un'applicazione WPF con diversi livelli come livello interfaccia repository, livello servizio repository, livello servizio SQL, livello servizio resto e il livello dell'interfaccia utente WPF principale.

  • Ho risolto questo errore. Ho notato che alcuni degli strati erano che fanno riferimento inutilmente ad altri progetti. Ho rimosso questo riferimento non necessario .
  • Quindi ho notato che parte del livello di servizio e del livello di repository aveva il mio progetto di interfaccia utente WPF come riferimento (progetto My StartUp); questo è cosa stava creando riferimento circolare. L'ho rimosso.

============================================ ==============

Conclusione: verificare ogni dipendenza di riferimento dei progetti e assicurarsi che non vi siano riferimenti inutili. Assicurarsi che i sottolivelli non stiano facendo riferimento al progetto di avvio nel riferimento.

Spero di essere stato utile.