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.
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!
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.
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.
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.
Es ist mir einfach passiert, dass verschiedene Projekte auf verschiedene Kopien derselben DLL verweisen.
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.
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
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 ..
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.
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
Ich habe ein ähnliches Problem und entferne die RuntimeFrameworkVersion. Das Problem wurde behoben.
Versuchen Sie, 1.1.1 oder zu entfernen
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.
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.
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.
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
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