Warum kann ich nicht auf meine Klassenbibliothek verweisen?

86

Ich habe eine Lösung, die eine Website und eine Klassenbibliothek in Visual Studio 2008 enthält.

Ich habe dann ein anderes Website-Projekt außerhalb der Lösung, das auf die Klassenbibliothek verweisen muss. Ich klicke mit der rechten Maustaste auf den Ordner "Bin" oder "Projekt" und wähle "Referenz hinzufügen". Wählen Sie dann "Mein Klassenbibliotheksprojekt" aus. Es fügt dem Bin-Ordner der Website etwa 15 DLLs hinzu, die die Klassenbibliothek benötigt, aber keine der CS-Dateien erkennt die using-Anweisungen.

using MyLibrary.MyFolder;

Es heißt, dass es nicht behoben werden kann, und ReSharper sagt nur, dass es sicher entfernt werden kann, da es nicht verwendet wird.

ReSharper kann erkennen, dass es die Referenz benötigt, und schlägt vor, "MyLibrary referenzieren und MyFolder verwenden". Ich bin mir nicht sicher, warum ich eine Referenz hinzufügen soll, die ich bereits habe. Wenn ich mit dem Vorschlag gehe, erhalte ich den Fehler

"Referenzmodul fehlgeschlagen. Referenz führt wahrscheinlich zu zirkulären Abhängigkeiten zwischen Projekten."

Ich habe versucht, auf die Eigenschaftenseiten der Websites zu gehen, alle Verweise zu entfernen und sie erneut hinzuzufügen, aber es werden dieselben Fehler angezeigt. Irgendwelche Ideen, warum das nicht funktioniert?

Brandon
quelle
Überprüfen Sie die .net Framework-Version in der Klassenbibliothek und das Projekt, auf das Sie verweisen
Manideep Innamuri

Antworten:

163

Überprüfen Sie außerdem, ob die Projekte der neuen Lösung mit einem kompatiblen Framework für das Projekt ausgeführt werden, das Sie einschließen möchten. Ich habe versucht, einen Verweis auf ein 4.0-Projekt in ein 3.5-Projekt aufzunehmen.

CindyH
quelle
3
Ein großes Lob! Ich habe meine Lösung als 4.5 erstellt und sie mit 4.0 verknüpft. Aufgrund unserer aktuellen 4.0-Anforderung habe ich die neue Lösung auf 4.0 herabgestuft, und jetzt hat mein anderes Projekt keine Probleme mehr, dagegen aufzubauen. +1 dafür, dass du mir geholfen hast, gesund zu bleiben!
David Peterson
1
Ich hatte mit diesem Projekt so viele frühere Hindernisse überwunden und wollte gerade das Handtuch werfen, als ich diesen Fehler bekam. Du hast es gespeichert, danke!
Tony D
1
Ich hätte nicht erwartet, dass das Problem auf diese Weise gelöst wird! Cool enuf
Irf
1
Dann sollte Microsoft dies sagen und eine Option hinzufügen, um alle auf dieselbe Version zu setzen.
PRMan
1
Rettete meinen Tag! VisualStudio würde nicht einmal eine Warnung auslösen, die mich daran erinnert :(
Reuel Ribeiro
86

Ich habe herausgefunden, wie ich dieses Problem beheben kann (zumindest für mich). Warum es funktioniert hat, weiß ich nicht genau, aber es hat funktioniert. (Ich habe gerade gegen eine zweite Website versucht, die das gleiche Problem hatte, und die folgende Lösung hat auch dafür funktioniert).

Ich habe versucht, die Projekte normal zu bereinigen und neu zu erstellen, alle meine Visual Studio-Instanzen herunterzufahren und neu zu starten, und sogar versucht, meinen Computer neu zu starten.

Was tatsächlich funktionierte, war das Öffnen des Projekts in Visual Studio, das Schließen aller geöffneten Registerkarten und das anschließende Herunterfahren.

Bevor ich die Registerkarten offen gelassen hatte, weil ich nicht dachte, dass es wichtig ist (und ich schließe die Registerkarten, die ich verwende, kaum jemals).

Brandon
quelle
Das einfache Neustarten von VS hat bei mir funktioniert. Die Ursache für dieses Problem war ein Refactoring zum Umbenennen von Projekten / Namespaces, das einen Fehler in R # auslöste.
mbx
Das hat auch bei mir funktioniert. Ich habe, wie Sie sagten, alle Registerkarten geschlossen und dann meine IDE und Voila neu gestartet. Ich kann jetzt auf meine Klassenbibliothek verweisen. Danke dir.
Yuva
31

Eine Möglichkeit besteht darin, dass die .NET Framework-Zielversion der Klassenbibliothek höher ist als die des Projekts.

user4847434
quelle
8

Ich hatte ein ähnliches Problem. Werden alle meine Referenzen von Resharper gestört? Die Lösung, die für mich funktioniert hat, besteht darin, den Resharper-Cache zu leeren und VS neu zu starten

tools-> options-> resharper-> options-> general-> klicken Sie auf die Schaltfläche Caches löschen und starten Sie VS neu

Felsig
quelle
4

Ich hatte ähnliche Probleme, bei denen VS manchmal baute und manchmal nicht. Nach einigen Suchen und Versuchen stellte ich fest, dass ich einen mehrdeutigen Verweis auf eine Klasse mit demselben Namen in verschiedenen Bibliotheken hatte ('FileManager'). Das Projekt, das nicht erstellt werden würde, waren meine Unit-Tests, die auf alle Module in meiner Lösung verweisen. Durch das Erzwingen des Verweises auf ein bestimmtes Modul wurden die Dinge für mich geregelt.

Mein Punkt ist: Anstatt ReSharper oder VS die Schuld zu geben, ist es möglicherweise eine gute Idee, noch einmal zu überprüfen, ob es wirklich keinen Zirkelverweis gibt. Mehr als oft können Klassen mit demselben Namen in verschiedenen Modulen Verwirrung stiften und sind oft ein Symptom für schlechtes Design (wie in meinem Fall).

Fedor Steeman
quelle
+1 In meinem Fall wurden zwei Projekte mit unterschiedlichen Namespaces zu einer EXE-Datei mit demselben Namen kompiliert (Assembly-Name auf der Registerkarte Anwendung in Visual Studio). Aufgrund eines Migrationsprojekts ist dies (teilweise) sinnvoll. MSBuild von der Kommandozeile gab uns einen einzigen nicht so hilfreichen Hinweis, der uns eine Weile wundern ließ : The type or namespace name 'A' does not exist in the namespace 'B'. Beachten Sie, dass hierfür keine Warnungen angezeigt werden ...
Jonno
3

Dies klingt nach einem ähnlichen Problem mit ReSharper:

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

Laut einem Benutzer im Thread, der einen Build erzwingt, wird das Problem (STRG + Umschalt + B) nach dem ersten Build behoben.

Klingt speziell in diesem Fall nach einem Problem mit ReSharper. Haben Sie versucht, unabhängig von den Warnungen und möglichen falschen Fehlern zu erstellen?

KP.
quelle
Ich bin früher darauf gestoßen. Und ich bin mir nicht sicher, ob das Problem durch das Erstellen "behoben" wurde. Es wird zwar kompiliert, zeigt jedoch weiterhin die Klassen an, wobei Anweisungen, Klassen usw. als nicht erkannt verwendet werden. Wenn ich jedoch absichtlich einen Methodenaufruf unterbreche, scheint Visual Studio den Fehler zu erkennen, auch wenn mir die Parameterliste nicht angezeigt wird. Ich denke, es ist ReSharpers Schuld.
Brandon
3

Da sich beide in derselben Lösung befinden, fügen Sie anstelle eines Verweises auf die DLL einen Verweis auf das Klassenbibliotheksprojekt selbst hinzu (das Dialogfeld Verweis hinzufügen enthält hierfür eine Registerkarte).

Ahh, es ist eine andere Lösung. Hab das verpasst. Wie wäre es, wenn Sie versuchen, anstatt einen Verweis auf das Projekt hinzuzufügen, einen Verweis auf die kompilierte DLL Ihrer Klassenbibliothek hinzuzufügen. Das Dialogfeld "Referenz hinzufügen" verfügt über eine Registerkarte "Durchsuchen", auf der dies ausgeführt wird.

Vilx-
quelle
1
Dies funktionierte für mich, andere Lösungen schlugen vor, eine Referenz hinzuzufügen, aber aus irgendeinem Grund fand ich sie erst, als ich im Lösungs-Explorer mit der rechten Maustaste auf das Hauptprojekt klickte.
Ralpharama
2

Wenn Sie Assemblys für Projekte referenzieren, die sich in derselben Lösung befinden, fügen Sie eine Projektreferenz hinzu (über die Registerkarte "Projekte"), anstatt im Ordner \ bin \ Debug (oder \ bin \ Release) (mithilfe von) nach der DLL zu suchen Registerkarte "Durchsuchen"). Siehe Screenshot unten. Suchen Sie nur nach der Assembly / DLL-Datei, wenn es sich um eine externe Assembly handelt.

Geben Sie hier die Bildbeschreibung ein

MacGyver
quelle
2

Ich habe * .csproj.user (Resharper-Datei) meines Projekts gelöscht, dann alle Registerkarten geschlossen und erneut geöffnet. Danach konnte ich mein Projekt kompilieren und es gab keine Warnungen zum erneuten Schärfen.

Alex
quelle
Ich habe dies getan und mein Intelli-Sense hat die Assembly-Informationen erneut angezeigt, aber sobald ich versucht habe, sie neu zu kompilieren, wurden meine Intelli-Sense-Informationen für diese Assembly gelöscht und der Build ist fehlgeschlagen. Dies ist ein seltsamer Fehler!
David Peterson
Ich musste mein Projekt auch von Grund auf neu erstellen ... Ich glaube, ich habe ein paar bis viele Deinstallationen / Installationen in NuGet für ein relativ neues Projekt durchgeführt.
Adam Nofsinger
Das Löschen und Neuerstellen von Referenzen hat bei mir funktioniert. Das vollständige Löschen von Projektdateien ist möglicherweise übertrieben.
Danjuggler
2

Ich hatte dieses Problem. Ich habe ewig gebraucht, um das herauszufinden. Ich hatte Leute über meiner Schulter, um zu helfen. Wir haben Visual Studio neu erstellt, bereinigt und neu gestartet, und das hat es nicht behoben. Wir haben die Referenzen entfernt und wieder hinzugefügt ...

Alles ohne Erfolg .... Bis!

Die Lösung für mein Problem war, dass meine Klassendeklaration falsch geschrieben war.

Bevor Sie anfangen, mich hart zu beurteilen, lassen Sie mich erklären, warum es nicht dumm war und warum dieser Fehler selbst von den intelligentesten Programmierern gemacht werden könnte.

Da der Fehler schon früh im Namen war, erschien er nicht in der Liste der Intellisense-Klassen, als ich anfing zu tippen.

z.B

Klassenname: Message.cs

Erklärung:

public class Massage
{
    //code here

}

Auf einen Blick und in einer kleinen Schrift sieht Massage identisch mit Message aus.

Wenn Sie M eingeben, werden zu viele Klassen aufgelistet, also habe ich e eingegeben, das in der falsch eingegebenen Version nicht angezeigt wurde, was den Eindruck erweckte, dass die Klasse nicht vom Compiler erfasst wurde.

WonderWorker
quelle
Sie hatten also im Wesentlichen einen Tippfehler. Das ist für andere nicht wirklich nützlich.
TylerH
2

Nach Bestätigung wurde dieselbe Version von asp.net verwendet. Ich habe das Projekt entfernt. Die Lösung wurde gereinigt und das Projekt erneut hinzugefügt. Das hat bei mir funktioniert.

David
quelle
0

Ich hatte ein ähnliches Problem in VS 2010, als ich ein Testprojekt für eine MVC 2-Anwendung erstellte. Die Symptome waren identisch.

Die Nachricht von ReSharper war etwas irreführend. Für einen Moment habe ich ReSharper völlig ignoriert und es auf die "manuelle VS-Art" gemacht:

  1. Ich habe die Lösung gereinigt.
  2. Ich habe den Verweis manuell zum MVC-Projekt hinzugefügt.
  3. Ich habe die using-Direktiven manuell hinzugefügt.
  4. Strg-Umschalt-b

Zu diesem Zeitpunkt habe ich einen Kompilierungsfehler erhalten: Ich hätte auf die verweisen sollen System.Web.Mvc in meinem Testprojekt Assembly (seufz). Durch Hinzufügen dieser Referenz wird das Projekt kompiliert. Die ReSharper-Probleme bleiben bestehen, aber der ReSharper-Testläufer funktioniert.

Wenn ich VS neu starte, sind auch die ReSharper-Fehler verschwunden. Ich bin mir nicht sicher, ob der Neustart erforderlich ist - das einfache Schließen der CS-Datei kann ausreichen.

Von nun an, wenn ich die ReSharper-Nachricht sehe

Modul konnte nicht referenziert werden. Wahrscheinlich führt eine Referenz zu zirkulären Abhängigkeiten zwischen Projekten.

Ich werde lesen

Modul konnte nicht referenziert werden. Wahrscheinlich führt die Referenz zu zirkulären Abhängigkeiten zwischen Projekten, oder es fehlen einige Verweise auf Abhängigkeiten der Abhängigkeiten der Referenz.

Marijn
quelle
0

Eine weitere mögliche Lösung, die gerade bei mir funktioniert hat:

Wenn Sie Assembly A haben, die auf Assembly B verweist, die beide auf eine nicht projektbezogene (externe) Assembly X verweisen, und der Code von Assembly B nicht erkennt, dass Sie auf X verwiesen haben, führen Sie die folgenden Schritte der Reihe nach aus:

  • Löschen Sie den Verweis auf X von BEIDEN A und B.
  • Erstellen Sie den Verweis auf X in B neu
  • Erstellen Sie den Verweis auf X in A neu

Anscheinend erkennt VS keinen Verweis auf eine externe Assembly in einem Projekt, der eine Abhängigkeit von einem anderen Projekt ist, das bereits auf das externe Projekt verweist. Indem Sie die Referenzen von Grund auf neu einrichten, überwinden Sie dies. Es ist nur sehr seltsam.

KeithS
quelle
Interessant aber wahr auf VS2015. Vielen Dank!
Scott Nimrod
0

Ich war mit diesem Problem konfrontiert und habe es gelöst, indem ich Visual Studio geschlossen, Visual Studio wieder geöffnet, die Lösung gereinigt und neu erstellt habe. Das hat bei mir funktioniert.

Muhammad Sohail
quelle
0

Wenn Sie TFS verwenden, funktioniert das Ausführen eines Get latest (rekursiv) nicht immer. Stattdessen erzwinge ich einen Neuzugang, indem ich auf Quellcodeverwaltung => Bestimmte Version abrufen und dann auf beide Felder klicke. Dies funktioniert in der Regel.

Geben Sie hier die Bildbeschreibung ein

Wenn es immer noch nicht funktioniert, zwingt das Löschen der Suo-Datei (normalerweise am selben Ort wie die Lösung) Visual Studio, alle Dateien aus der Quelle abzurufen (und anschließend die Suo-Datei neu zu erstellen).

Wenn dies nicht funktioniert, schließen Sie alle geöffneten Dateien und schließen Sie Visual Studio. Wenn Sie Visual Studio das nächste Mal öffnen, sollte dies behoben sein. Es gibt einen Resharper-Fehler, der auf diese Weise behoben wird.

WonderWorker
quelle
0

Ich war kürzlich auf ein ähnliches Problem gestoßen. Ich arbeite in Visual Studio 2015 mit Resharper Ultimate 2016.1.2. Ich habe versucht, meiner Codebasis eine neue Klasse hinzuzufügen, während ich versucht habe, auf eine Klasse aus einer anderen Assembly zu verweisen, aber Resharper hat einen Fehler für dieses Paket ausgegeben.

Mit Hilfe eines Kollegen stellte ich fest, dass die referenzierte Klasse im globalen Namespace vorhanden war und von der neuen Klasse aus nicht zugänglich war, da sie von einer anderen Entität mit demselben Namen ausgeblendet wurde, die im aktuellen Namespace vorhanden war.

Durch Hinzufügen eines Schlüsselworts 'global ::' vor dem erforderlichen Namespace konnte ich auf die Klasse verweisen, nach der ich tatsächlich gesucht habe. Weitere Details hierzu finden Sie auf der unten aufgeführten Seite:

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

Lumena
quelle
0

Wenn beide Projekte in derselben Lösung enthalten sind, ist es angemessener, wenn Sie die Referenz für das benötigte Projekt hinzufügen, nicht die kompilierte DLL.

Geben Sie hier die Bildbeschreibung ein

Manuel Roldan
quelle
-1

Leider hat das einzige, was für mich funktioniert hat, das vollständige Löschen und Neuerstellen des Klassenbibliotheksprojekts, nachdem die darin enthaltenen Klassendateien vorübergehend an eine andere Stelle kopiert wurden. Nur dann erkennt das ASP.Net-Webprojekt die usingAnweisungen, die sich auf das Klassenbibliotheksprojekt beziehen. Dies war mit Visual Studio 2010 ohne ReSharper.

Snark
quelle
-1

Ich hatte ein ähnliches Problem. Was für mich funktioniert hat, ist, dass ich eine falsche Klassenbibliothek aus dem Visual Studio hinzugefügt habe . Ich habe mithilfe der Suchfunktion von Visual Studio hinzugefügt.

Was ich tun musste, war Neues Projekt hinzufügen> Visual C #> Klassenbibliothek . Und diese neu hinzugefügte Klassenbibliothek ist die richtige und kann jetzt als Referenz für jedes Projekt hinzugefügt werden.

Muhammad Rehan Qadri
quelle
-4

Möglicherweise vergessen Sie, eine Referenz hinzuzufügen die Klassenbibliothek, die Sie importieren mussten .

Klicken Sie mit der rechten Maustaste auf die Klassenbibliothek, in die Sie importieren möchten (die mehrere importierte Klassenbibliotheken enthält). -> Hinzufügen-> Referenz (Wählen Sie Projekte-> Lösung-> Wählen Sie die Klassenbibliothek aus, aus der Sie importieren möchten-> OK.)

Kyle
quelle