wake-up-neo.com

Der Typ ist in einer Assembly definiert, auf die nicht verwiesen wird. Wie findet man die Ursache?

Ich weiß, dass die Fehlermeldung häufig ist und es gibt viele Fragen zu SO zu diesem Fehler, aber bisher haben mir keine Lösungen geholfen, also habe ich mich entschlossen, die Frage zu stellen. Der Unterschied zu den meisten ähnlichen Fragen ist das Verwenden des App_Code-Verzeichnisses.

Fehlermeldung:

CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
Assembly that is not referenced. You must add a reference to Assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Quelldatei:

c:\inetpub\wwwroot\Test\Website\App_Code\Company\Project\BusinessLogic\Manager.cs

Mit folgenden Vorschlägen hier und hier habe ich alle Instanzen von Project.Rights.dll in C:\Windows\Microsoft.NET /*.*.__ gelöscht. Gemäß dies , ich geprüft, ob für die betreffenden .cs-Dateien die Build-Aktion auf "Kompilieren" eingestellt ist. Sie tun das Ich habe auch überprüft, ob die CS-Datei, die den Typ "Project.Rights.OperationsProvider" enthält, im App_Code-Verzeichnis bereitgestellt wird.

Aus irgendeinem Grund sucht die Anwendung nicht nach dem Typ im Verzeichnis App_Code. Da ich alle Instanzen von Project.Rights.dll (die ich kenne) gelöscht habe, weiß ich nicht, in welcher Assembly die Fehlermeldung erwähnt wird.

60
afaf12

Wenn Sie diesen Fehler erhalten, ist nicht immer klar, was los ist, aber wie der Fehler besagt, fehlt Ihnen ein Hinweis. Nehmen Sie die folgende Codezeile als Beispiel:

MyObjectType a = new MyObjectType("parameter");

Es sieht einfach aus und Sie haben wahrscheinlich "MyObjectType" korrekt referenziert. Nehmen wir an, eine der Überladungen für den Konstruktor "MyObjectType" nimmt einen Typ an, auf den Sie nicht verwiesen haben. Zum Beispiel gibt es eine Überladung, definiert als:

public MyObjectType(TypeFromOtherAssembly parameter) {
    // ... normal constructor code ...
}

Dies ist mindestens ein Fall, in dem Sie diesen Fehler erhalten. Suchen Sie also nach diesem Mustertyp, auf den Sie den Typ referenziert haben, jedoch nicht alle Typen von Eigenschaften oder Methodenparametern, die für Funktionen möglich sind, die für diesen Typ aufgerufen werden.

Hoffentlich bringt dich das wenigstens in die richtige Richtung!

75
drew_w

Überprüfen Sie das Zielgerüst in den Projekten.

In meinem Fall bedeutet "Sie müssen einen Verweis auf Assembly hinzufügen" eigentlich, dass Aufrufer- und Referenzprojekte nicht das gleiche Zielgerüst hatten. Das Aufruferprojekt hatte .Net 4.5, aber die referenzierte Bibliothek hatte das Ziel 4.6.1. 

Ich bin sicher, dass MS-Compiler intelligenter sein kann und aussagekräftigere Fehlermeldungen enthält. Ich habe einen Vorschlag zu https://github.com/dotnet/roslyn/issues/14756 hinzugefügt.

36

In meinem Fall lag dies daran, dass das Aktualisieren eines NuGet-Pakets nur Verweise auf eine DLL-Abhängigkeit in einige, aber nicht alle -Projekte in meiner Lösung aktualisiert hatte - was zu widersprüchlichen Versionen führte. Mit einem Tool im Grep-Stil zum Durchsuchen von Text in * .csproj-Dateien in meiner Lösung war es dann einfach, die Projekte zu sehen, die noch aktualisiert werden mussten.

13
rogersillito

Wenn Sie diesen Fehler erhalten, bedeutet dies, dass der von Ihnen verwendete Code einen Verweis auf einen Typ in einer Assembly enthält. Die Assembly ist jedoch nicht Teil Ihres Projekts und kann daher nicht verwendet werden.

Das Löschen von Project.Rights.dll ist das Gegenteil von dem, was Sie möchten. Sie müssen sicherstellen, dass Ihr Projekt die Assembly referenzieren kann. Es muss also entweder im Global Assembly Cache oder im Verzeichnis ~/Bin Ihrer Webanwendung abgelegt werden.

Bearbeiten-Wenn Sie die Assembly nicht verwenden möchten, ist das Löschen ebenfalls nicht die richtige Lösung. Stattdessen müssen Sie alle Verweise darauf in Ihrem Code entfernen. Da die Assembly nicht direkt von Code benötigt wird, den Sie geschrieben haben, sondern durch etwas anderes, auf das Sie verweisen, müssen Sie die referenzierte Assembly durch etwas ersetzen, das nicht Project.Rights.dll als Abhängigkeit enthält.

7
mason

Es ist mir einfach passiert, dass verschiedene Projekte auf verschiedene Kopien derselben DLL verweisen.

3
Gonzalo Méndez

In meinem Fall habe ich auf eine Bibliothek verwiesen, die auf der falschen Plattform/Konfiguration aufgebaut wurde (ich hatte gerade die referenzierte Bibliothek erstellt).

Außerdem konnte ich das Problem in Visual Studio Configuration Manager nicht beheben. Es ist nicht möglich, neue Plattformen und Konfigurationen für diese Bibliothek zu wechseln und zu erstellen. Ich habe es korrigiert, indem ich die Einträge im Abschnitt ProjectConfigurationPlatforms der Datei .sln für dieses Projekt korrigierte. Alle seine Permutationen wurden auf Debug|Any CPU gesetzt (ich bin mir nicht sicher, wie ich das gemacht habe). Ich überschrieb die Einträge für das defekte Projekt mit denen für ein funktionierendes Projekt und änderte die GUID für jeden Eintrag.

Einträge für ein funktionierendes Projekt

{9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.ActiveCfg = Release|x64 {9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.Build.0 = Release|x64

Einträge für beschädigtes Projekt

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Debug|Any CPU {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Debug|Any CPU

Beschädigte Einträge jetzt behoben

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Release|x64 {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Release|x64

Ich hoffe das hilft jemandem.

3
Joseph

Es hat für mich nicht funktioniert, als ich versucht habe, den Verweis über die Registerkarte .NET-Assemblies hinzuzufügen .. Es hat jedoch funktioniert, als ich den Verweis mit BROWSE zu C:\Windows\Microsoft hinzugefügt habe. NET\Framework\v4.0.30319

1

Der Grund für den Fehler war für mich, dass das WebForm, in dem der Fehler gemeldet wurde, aus einem anderen Ordner verschoben wurde, der Name der Codefile-Klasse jedoch unverändert blieb und nicht dem tatsächlichen Pfad entspricht. 

Ausgangszustand:
Ursprünglicher Dateipfad: /Folder1/Subfolder1/MyWebForm.aspx.cs
Name der ursprünglichen Codedatei:Folder1_Subfolder1_MyWebForm

Nachdem die Datei verschoben wurde:
Dateipfad: /Folder1/MyWebForm.aspx.cs
Codefile-Klassenname (unverändert, wobei der Fehler angezeigt wird):Folder1_Subfolder1_MyWebForm

Die Lösung:
Umbenennen Ihre Codefile-Klasse Folder1_Subfolder1_MyWebForm
zu one entsprechend mit dem neuen Pfad : Folder1_MyWebForm

Alles auf einmal - Problem gelöst, keine Fehlerberichterstattung ..

0
Vladimír Hála

Für mich war dies darauf zurückzuführen, dass das Projekt direkt und indirekt (durch eine andere Abhängigkeit) auf zwei verschiedene Builds von Bouncy Castle verwies, die unterschiedliche Namen der Assembly hatten. Eines der Bouncy Castle-Builds war das NuGet-Paket, das andere war ein Debug-Build der aus GitHub heruntergeladenen Quelle. Beide waren nominell Version 1.8.1, aber die Projekteinstellungen des GitHub-Codes stellten den Assemblynamen auf BouncyCastle ein, während das NuGet-Paket den Assemblynamen BouncyCastle.Crypto hatte. Das Ändern der Projekteinstellungen und das Ausrichten der Assemblynamen haben das Problem behoben. 

0
mathiash

In meinem Fall war das so, weil ich es benutzt habe 

Impliziter Operator

zwischen BLL und DAL classes.wenn ich BLL Layer in Application Layer verwenden möchte, habe ich diese Fehlermeldung erhalten . Ich habe mich geändert 

impliziter Operator

zu 

expliziter Operator

es wird in Ordnung sein ... Danke

0

Ich habe ein ähnliches Problem und entferne die RuntimeFrameworkVersion. Das Problem wurde behoben.

Versuchen Sie, 1.1.1 oder zu entfernen

0
Arash

In meinem Fall war die Version der DLL, auf die verwiesen wurde, tatsächlich neuer als die, die ich zuvor hatte. 

Ich musste nur noch zur vorherigen Version zurückkehren und das hat das Problem behoben. 

0
Hugo Nava Kopp

Dies kann auch bedeuten, dass Sie eine Bibliothek verwenden, die (öffentliche) Typen verfügbar macht, die in einer Bibliothek definiert sind. Auch wenn Sie diese nicht speziell in Ihrer Bibliothek verwenden (die nicht erstellt wird).

Was dies wahrscheinlich verhindert, ist das Schreiben von Code, der eine Klasse verwendet (deren Typen aus einer Bibliothek stammen, auf die nicht verwiesen wird), die Sie nicht verwenden können.

0
cr4ne

Möglicherweise erfordert eine Bibliothek (DLL-Datei), die Sie verwenden, eine andere Bibliothek. In meinem Fall habe ich auf eine Bibliothek verwiesen, die ein Datenbankentitätsmodell enthielt - ich habe jedoch vergessen, auf die Entity Framework-Bibliothek zu verweisen.

0
Graham Laight

Der Typ 'Domain.tblUser' ist in einer Assembly definiert, die nicht .__ ist. referenziert. Sie müssen einen Verweis auf die Assembly-Domäne .__ hinzufügen. Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null '.

**Solved:**
 Add reference of my domain library layer to my web app libary layer

Hinweis: Stellen Sie sicher, dass Ihre Referenzen entsprechend Ihrem DI-Container korrekt sind

0
Asif Raza

ein Hauptgrund kann die Eigenschaft von DLL sein. Sie müssen vorher etwas tun, um das specific version property zu überprüfen, wenn es wahr ist, um es als falsch zu definieren 

Grund: Möglicherweise ist der Quellcode beim Erstellen mit einer anderen (alten) Version verbunden. Diese Bibliothek hat jedoch mit einem neuen Update ein Upgrade vorgenommen. Die Version unterscheidet sich nun in Assembly Cash und Ihre Anwendung darf keine neuen DLL erhalten, und nach dem Deaktivieren von specific version property Ihr Applacaten kann die neue Version von DLL -Referenzen abrufen 

0