Perché non posso fare riferimento alla mia libreria di classi?


86

Ho una soluzione che contiene un sito Web e una libreria di classi in Visual Studio 2008.

Ho quindi un altro progetto di sito Web al di fuori della soluzione che deve fare riferimento alla libreria di classi. Faccio clic con il pulsante destro del mouse sulla cartella Bin o su Project e seleziono Aggiungi riferimento, quindi seleziono il mio progetto libreria di classi, aggiunge le circa 15 DLL necessarie alla libreria di classi nella cartella bin dei siti Web, ma nessuno dei file .cs riconosce le istruzioni using.

using MyLibrary.MyFolder;

Dice che non può risolverlo e ReSharper dice semplicemente che può essere rimosso in sicurezza poiché non viene utilizzato.

ReSharper può riconoscere di aver bisogno del riferimento e suggerisce di "fare riferimento a MyLibrary e utilizzare MyFolder". Non sono sicuro del motivo per cui mi suggerisce di aggiungere un riferimento che ho già. Quando vado con il suggerimento, ottengo l'errore

"Impossibile fare riferimento al modulo. Probabilmente, il riferimento produrrà dipendenze circolari tra i progetti."

Ho provato ad andare alle pagine delle proprietà dei siti web e rimuovere tutti i riferimenti e aggiungerli nuovamente, ma dà gli stessi errori. Qualche idea sul perché non funziona?


Controlla la versione .net framework nella libreria di classi e il progetto a cui stai facendo riferimento
Manideep Innamuri

Risposte:


164

Inoltre, controlla che i progetti della nuova soluzione vengano eseguiti su un framework compatibile con il progetto che stai cercando di includere. Stavo cercando di includere un riferimento a un progetto 4.0 in un progetto 3.5.


3
Kudos! Stavo costruendo la mia soluzione come 4.5 e la collegavo a una 4.0. A causa del nostro attuale requisito 4.0, ho effettuato il downgrade della nuova soluzione a 4.0 e ora il mio altro progetto non ha problemi a costruirlo. +1 per avermi aiutato a rimanere sano di mente!
David Peterson

1
Avevo superato tanti ostacoli precedenti con questo progetto, stavo per gettare la spugna quando ho ricevuto questo errore. L'hai salvato, grazie!
Tony D

1
Non mi aspettavo in questo modo che il problema sarebbe stato risolto! Cool enuf
Irfaan

1
Quindi Microsoft dovrebbe dirlo e includere un'opzione per metterli tutti nella stessa versione.
PRMan

1
Mi ha salvato la giornata! VisualStudio non ha nemmeno lanciato un avviso per ricordarmelo :(
Reuel Ribeiro

86

Ho trovato come risolvere questo problema (almeno per me). Perché ha funzionato, non ne sono sicuro, ma ha funzionato. (Ho appena provato contro un secondo sito Web che presentava lo stesso problema e la seguente soluzione ha funzionato anche per questo).

Ho provato la normale pulizia dei progetti e la ricostruzione, chiudendo tutte le mie istanze di Visual Studio e riavviandole, ho anche provato a riavviare il mio computer.

Ciò che ha effettivamente funzionato è stato aprire il progetto in Visual Studio, chiudere tutte le schede aperte e quindi spegnerlo.

Prima avevo lasciato le schede aperte perché non pensavo fosse importante (e non chiudo quasi mai le schede che sto usando).


Il semplice riavvio di VS ha funzionato per me. La causa di quel problema era un refactoring di ridenominazione del progetto / spazio dei nomi che attivava un bug in R #.
mbx

Questo ha funzionato anche per me. Ho chiuso tutte le schede come hai detto e poi ho riavviato il mio IDE e voilà, ora posso fare riferimento alla mia libreria di classi. Grazie.
Yuva

31

Una possibilità è che la versione .NET Framework di destinazione della libreria di classi sia superiore a quella del progetto.


8

Ho avuto un problema simile, tutti i miei riferimenti verranno infastiditi da Resharper - La soluzione che ha funzionato per me è stata quella di cancellare la cache di Resharper e quindi riavviare VS

strumenti-> opzioni-> resharper-> opzioni-> generale-> fai clic sul pulsante cancella cache e riavvia VS


4

Ho avuto problemi simili in cui VS a volte costruiva e talvolta no. Dopo alcune ricerche e tentativi ho scoperto di avere un riferimento ambiguo a una classe con lo stesso nome in diverse librerie ("FileManager"). Il progetto che non avrei costruito erano i miei test unitari che fanno riferimento a tutti i moduli nella mia soluzione. L'applicazione del riferimento a un modulo specifico ha risolto le cose per me.

Il punto è: invece di incolpare ReSharper o VS, potrebbe essere una buona idea ricontrollare se in qualche modo non esiste davvero una sorta di riferimento circolare. Il più delle volte, classi con gli stessi nomi in moduli diversi potrebbero creare confusione ed è spesso sintomo di una cattiva progettazione (come nel mio caso).


+1 nel mio caso due progetti con spazi dei nomi diversi sono stati compilati in un .exe con lo stesso nome (nome dell'assembly nella scheda Applicazione in Visual Studio) - a causa di un progetto di migrazione questo ha (un po ') senso; MSBuild dalla riga di comando ci ha fornito un unico indizio non così utile che ci ha lasciato a chiederci per un po ': The type or namespace name 'A' does not exist in the namespace 'B'. Nota che non vengono visualizzati avvertimenti per questo ...
Jonno

3

Sembra un problema simile con ReSharper:

http://www.jetbrains.net/devnet/thread/275827

Secondo un utente nel thread, forzare una build risolve il problema (CTRL + Maiusc + B) dopo la prima build.

Sembra un problema con ReSharper in particolare nel loro caso .. Hai provato a compilare indipendentemente dagli avvisi e dai possibili falsi errori?


L'ho scoperto prima. E non sono sicuro che la sua costruzione abbia "risolto" il problema. Compila, ma mostra ancora le classi, le istruzioni using, le classi, ecc. Come non riconosciute. Tuttavia, se interrompo intenzionalmente una chiamata al metodo, Visual Studio sembra riconoscere l'errore, anche se non mi mostra l'elenco dei parametri. Immagino sia colpa di ReSharpers.
Brandon

3

Poiché sono entrambi nella stessa soluzione, invece di aggiungere un riferimento alla DLL, aggiungi un riferimento al progetto della libreria di classi stesso (la finestra di dialogo Aggiungi riferimento avrà una scheda per questo).

Ahh, è una soluzione diversa. Mi è mancato. Che ne dici di provare invece di aggiungere un riferimento al progetto aggiungendo un riferimento alla DLL compilata della tua libreria di classi. La finestra di dialogo Aggiungi riferimento ha una scheda Sfoglia che lo fa.


1
Questo ha funzionato per me, altre soluzioni suggerivano di aggiungere un riferimento, ma per qualche motivo non l'ho trovato finché non ho fatto clic con il pulsante destro del mouse sul progetto principale in Esplora soluzioni.
Ralpharama

3

Dopo aver confermato che veniva utilizzata la stessa versione di asp.net. Ho rimosso il progetto. ripulito la soluzione e riaggiunto il progetto. Questo è ciò che ha funzionato per me.


Ho avuto lo stesso problema e questo sembrava aiutare. Piuttosto strano.
ineccito il

2

Se si fa riferimento ad assembly per progetti che si trovano nella stessa soluzione, aggiungere un riferimento al progetto (utilizzando la scheda "Projects") anziché cercare la dll nella cartella \ bin \ Debug (o \ bin \ Release) (utilizzando il Scheda "Sfoglia"). Vedere la schermata qui sotto. Cerca il file assembly / dll solo se è considerato un assembly esterno.

inserisci qui la descrizione dell'immagine


2

Ho eliminato * .csproj.user (file resharper) del mio progetto, quindi chiudo tutte le schede e riaprilo. Dopo di che sono stato in grado di compilare il mio progetto e non c'erano avvisi di resharper.


L'ho fatto e ho ottenuto che il mio intelli-sense mostra di nuovo le informazioni sull'assembly, ma non appena ho provato a ricompilare, le mie informazioni sull'intelli-sense per quell'assembly sono state cancellate e la build non è riuscita. Questo è uno strano errore!
David Peterson

Ho anche dovuto ricreare il mio progetto da zero ... penso di aver disinstallato / installato da pochi a molti in NuGet su un progetto relativamente nuovo.
Adam Nofsinger

Eliminare e ricreare i riferimenti ha funzionato per me, l'eliminazione completa del file di progetto potrebbe essere eccessiva.
danjuggler

2

Ho avuto questo problema. Mi ci sono voluti anni per capirlo. Avevo delle persone che mi aiutavano. Abbiamo ricostruito, pulito e riavviato Visual Studio e questo non lo ha risolto. Abbiamo rimosso e aggiunto nuovamente i riferimenti ...

Tutto inutilmente .... Fino a!

La soluzione al mio problema era quella mia dichiarazione di classe era stata scritta in modo errato.

Prima di iniziare a giudicarmi duramente, permettimi di spiegare perché non è stato stupido e anche perché questo errore potrebbe essere fatto anche dal più intelligente dei programmatori.

Poiché l'errore era all'inizio del nome, non appariva nell'elenco della classe intellisense quando ho iniziato a digitare.

per esempio

Nome della classe: Message.cs

Dichiarazione:

public class Massage
{
    //code here

}

A prima vista e con un carattere piccolo, Massage sembra identico a Message.

Digitando M si elencavano troppe classi, quindi ho digitato e, che non appariva nella versione errata, il che ha dato l'impressione che la classe non fosse stata rilevata dal compilatore.


Quindi essenzialmente hai avuto un errore di battitura. Non è davvero utile per gli altri.
TylerH

0

Ho riscontrato un problema simile in VS 2010, durante la creazione di un progetto di test per un'applicazione MVC 2. I sintomi erano identici.

Il messaggio di ReSharper era in qualche modo fuorviante. Per un momento ho completamente ignorato ReSharper e l'ho fatto nel "modo VS manuale":

  1. Ho pulito la soluzione.
  2. Ho aggiunto manualmente il riferimento al progetto MVC.
  3. Ho aggiunto manualmente le direttive using.
  4. ctrl-maiusc-b

In questa fase ho ricevuto un errore di compilazione: avrei dovuto fare riferimento System.Web.Mvcall'assembly nel mio progetto di test (sigh). L'aggiunta di questo riferimento causa la compilazione del progetto. I problemi di ReSharper rimangono, ma il test runner di ReSharper funziona.

Quando riavvio VS, anche gli errori di ReSharper scompaiono. Non sono sicuro che sia necessario il riavvio: la semplice chiusura del file .cs potrebbe essere sufficiente.

D'ora in poi, quando vedo il messaggio ReSharper

Impossibile fare riferimento al modulo. Probabilmente, il riferimento produrrà dipendenze circolari tra i progetti.

io leggerò

Impossibile fare riferimento al modulo. Probabilmente, il riferimento produrrà dipendenze circolari tra i progetti, oppure mancano alcuni riferimenti alle dipendenze delle dipendenze del riferimento.


0

Un'altra possibile soluzione che ha funzionato per me:

Se si dispone dell'assembly A, che fa riferimento all'assembly B, entrambi fanno riferimento a un assembly X non di progetto (esterno) e il codice dell'assembly B non riconoscerà che si è fatto riferimento a X, quindi provare i seguenti passaggi in ordine:

  • Trascina il riferimento a X sia da A che da B.
  • Ricrea il riferimento a X in B
  • Ricrea il riferimento a X in A

Apparentemente, VS non riconoscerà un riferimento a un assembly esterno in un progetto che è una dipendenza di un altro progetto che fa già riferimento a un assembly esterno. Impostando nuovamente i riferimenti da zero, si supera questo problema. È solo molto strano.


Interessante ma vero su VS2015. Grazie!
Scott Nimrod

0

Ho affrontato questo problema e l'ho risolto chiudendo Visual Studio, riaprendo Visual Studio, ripulendo e ricostruendo la soluzione. Questo ha funzionato per me.


0

Se si utilizza TFS, l'esecuzione di Get latest (ricorsiva) non sempre funziona. Invece, forzo una versione più recente facendo clic sul controllo del codice sorgente => Ottieni versione specifica e quindi su entrambe le caselle. Questo tende a funzionare.

inserisci qui la descrizione dell'immagine

Se ancora non funziona, l'eliminazione del file suo (che di solito si trova nello stesso posto della soluzione) costringe visual studio a ottenere tutti i file dalla sorgente (e successivamente ricostruire il file suo).

Se ciò non funziona, prova a chiudere tutti i file aperti e chiudere Visual Studio. Alla successiva apertura di Visual Studio dovrebbe essere risolto. È presente un bug di affilatura risolto in questo modo.


0

Di recente mi ero imbattuto in un problema simile. Sto lavorando in Visual Studio 2015 con Resharper Ultimate 2016.1.2. Stavo cercando di aggiungere una nuova classe alla mia base di codice mentre cercavo di fare riferimento a una classe da un altro assembly, ma Resharper avrebbe generato un errore per quel pacchetto.

Con l'aiuto di un collega, ho capito che la classe di riferimento esisteva nello spazio dei nomi globale e non era accessibile dalla nuova classe poiché era nascosta da un'altra entità con lo stesso nome che esisteva nello spazio dei nomi corrente.

L'aggiunta di una parola chiave "globale ::" prima dello spazio dei nomi richiesto mi ha aiutato a fare riferimento alla classe che stavo effettivamente cercando. Maggiori dettagli su questo possono essere trovati nella pagina elencata di seguito:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

Se entrambi i progetti sono contenuti nella stessa soluzione, sarà più appropriato aggiungere il riferimento per il progetto che ti serve, non la sua dll compilata.

inserisci qui la descrizione dell'immagine


-1

Sfortunatamente l'unica cosa che ha funzionato per me è stata eliminare completamente e ricreare il progetto della libreria di classi, dopo aver temporaneamente copiato i file di classe in esso altrove. Solo allora il progetto Web ASP.Net riconoscerà le usingistruzioni che si riferivano al progetto della libreria di classi. Questo era con Visual Studio 2010, non utilizzando ReSharper.


-1

Ho avuto un problema simile. Quello che ha funzionato per me è che avevo aggiunto una libreria di classi sbagliata da Visual Studio . Ho aggiunto utilizzando la funzione di ricerca di Visual Studio.

Quello che dovevo fare era aggiungere un nuovo progetto> Visual C #> Libreria di classi . E questa libreria di classi appena aggiunta è quella giusta e ora può essere aggiunta come riferimento a qualsiasi progetto.


-4

Potresti dimenticare di aggiungere un riferimento alla libreria di classi che avevi bisogno di importare.

Fare clic con il pulsante destro del mouse sulla libreria di classi in cui si desidera importare (che contiene più librerie di classi importate), -> Aggiungi-> Riferimento (Selezionare Progetti-> Soluzione-> selezionare la libreria di classi da cui si desidera importare-> OK)

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.