Ich weiß, dass die Fehlermeldung häufig vorkommt und es gibt viele Fragen zu SO zu diesem Fehler, aber bisher haben mir keine Lösungen geholfen. Deshalb habe ich beschlossen, die Frage zu stellen. Der Unterschied zu den meisten ähnlichen Fragen besteht darin, dass ich das Verzeichnis App_Code verwende.
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
Folgende Vorschläge hier und hier habe ich alle Instanzen Project.Rights.dll innen C gelöscht: \ Windows \ Microsoft.NET /*.* Nach diesem , überprüfte ich , wenn CS - Dateien in diesem Build Aktion auf „Compile“ . Tun sie. Ich habe außerdem überprüft, ob die CS-Datei mit dem Typ "Project.Rights.OperationsProvider" im Verzeichnis App_Code bereitgestellt wird.
Aus irgendeinem Grund sucht die Anwendung nicht nach dem Typ im Verzeichnis App_Code. Da ich alle mir bekannten Instanzen von Project.Rights.dll gelöscht habe, weiß ich nicht, welche Assembly in der Fehlermeldung erwähnt wird.
quelle
Antworten:
Wenn Sie diesen Fehler erhalten, ist es nicht immer offensichtlich, was los ist, aber wie der Fehler sagt, fehlt Ihnen eine Referenz. Nehmen Sie als Beispiel die folgende Codezeile:
MyObjectType a = new MyObjectType("parameter");
Es sieht einfach aus und Sie haben wahrscheinlich "MyObjectType" korrekt referenziert. Angenommen, eine der Überladungen für den Konstruktor "MyObjectType" verwendet einen Typ, auf den Sie nicht verwiesen haben. Zum Beispiel gibt es eine Überlastung 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, bei dem Sie auf den Typ verwiesen haben, jedoch nicht auf alle Typen der Eigenschaften oder Methodenparameter, die für Funktionen möglich sind, die für diesen Typ aufgerufen werden.
Hoffentlich bringt dich das zumindest in die richtige Richtung!
quelle
Überprüfen Sie das Ziel-Framework in den Projekten.
In meinem Fall bedeutete "Sie müssen einen Verweis auf Assembly hinzufügen" tatsächlich, dass Aufrufer- und Referenzprojekte nicht dasselbe Zielframework hatten. Das Aufruferprojekt hatte .Net 4.5, aber die referenzierte Bibliothek hatte das Ziel 4.6.1.
Ich bin sicher, dass der MS-Compiler intelligenter sein und aussagekräftigere Fehlermeldungen protokollieren kann. Ich habe https://github.com/dotnet/roslyn/issues/14756 einen Vorschlag hinzugefügt
quelle
In meinem Fall lag dies daran, dass bei einem NuGet-Paket-Update nur Verweise auf eine DLL-Abhängigkeit in einigen, aber nicht allen Projekten in meiner Lösung aktualisiert wurden, was zu widersprüchlichen Versionen führte. Mit einem Grep-Tool zum Durchsuchen von Text in * .csproj-Dateien in meiner Lösung war es dann einfach, die Projekte zu erkennen, die noch aktualisiert werden mussten.
quelle
Wenn Sie diesen Fehler erhalten, bedeutet dies, dass der von Ihnen verwendete Code auf einen Typ verweist, der sich in einer Assembly befindet, die Assembly jedoch nicht Teil Ihres Projekts ist und daher nicht verwendet werden kann.
Das Löschen von Project.Rights.dll ist das Gegenteil von dem, was Sie wollen. Sie müssen sicherstellen, dass Ihr Projekt auf die Baugruppe verweisen 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 dem von Ihnen geschriebenen Code benötigt wird, sondern von etwas anderem, auf das Sie verweisen, müssen Sie diese Assembly, auf die verwiesen wird, durch etwas ersetzen, das keine Project.Rights.dll als Abhängigkeit enthält.
quelle
In meinem Fall habe ich auf eine Bibliothek verwiesen, die auf der falschen Plattform / Konfiguration erstellt wurde (ich hatte gerade die referenzierte Bibliothek erstellt).
Außerdem konnte ich das Problem in Visual Studio Configuration Manager nicht beheben - ich konnte nicht wechseln und neue Plattformen und Konfigurationen für diese Bibliothek erstellen. Ich habe es behoben, indem ich die Einträge im
ProjectConfigurationPlatforms
Abschnitt der.sln
Datei für dieses Projekt korrigiert habe . Alle seine Permutationen wurden eingestelltDebug|Any CPU
(ich bin nicht sicher, wie ich das gemacht habe). Ich habe die Einträge für das fehlerhafte Projekt mit denen für ein funktionierendes Projekt überschrieben und die GUID für jeden Eintrag geändert.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.
quelle
FAE04EC0-301F-11D3-BF4B-00C04F79EFBC
(C #) in9A19103F-16F7-4668-BE54-9A1E7A4F7556
(ASP.NET) geändert . Nachdem ich sie wieder gewechselt hatte, lief alles gut.Mir ist gerade passiert, dass verschiedene Projekte auf verschiedene Kopien derselben DLL verweisen. Ich habe sichergestellt, dass alle auf dieselbe Datei auf der Festplatte verweisen, und der Fehler ist wie erwartet verschwunden.
quelle
Es hat bei mir nicht funktioniert, als ich versucht habe, die Referenz von der Registerkarte .NET Assemblies hinzuzufügen. Es hat jedoch funktioniert, als ich den Verweis mit BROWSE zu C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 hinzugefügt habe
quelle
Einer der Hauptgründe kann die Eigenschaft der DLL sein, die Sie benötigen, bevor Sie etwas tun, um die zu überprüfen
specific version property
ob sie wahr und falsch istGrund: Möglicherweise wurde der Quellcode beim Erstellen mit einer anderen (alten) Version
specific version property
verknüpft , aber diese Bibliothek wurde mit einem neuen Update aktualisiert. Die Version unterscheidet sich jetzt in Assembly Cash, und Ihre Anwendung darf keine neue DLL erhalten. Nach dem Deaktivieren ist Ihre Anwendung kostenlos um die neue Version von DLL-Referenzen zu erhaltenquelle
Möglicherweise erfordert eine von Ihnen verwendete Bibliothek (DLL-Datei) eine andere Bibliothek. In meinem Fall habe ich auf eine Bibliothek verwiesen, die ein Datenbankentitätsmodell enthielt - aber ich habe vergessen, auf die Entitätsframeworkbibliothek zu verweisen.
quelle
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).
Dies verhindert wahrscheinlich, dass Sie Code schreiben, der eine Klasse verwendet (deren Signatur die Typen aus einer Bibliothek enthält, auf die nicht verwiesen wird), die Sie nicht verwenden können.
quelle
Für mich war der Grund, warum der Fehler auftrat, dass die WebForm, in der der Fehler gemeldet wurde, aus einem anderen Ordner verschoben wurde, der Name der Codedateiklasse jedoch unverändert blieb und nicht dem tatsächlichen Pfad entsprach.
Ausgangszustand:
Ursprünglicher Dateipfad: /Folder1/Subfolder1/MyWebForm.aspx.cs
Name der ursprünglichen Codedateiklasse:
Folder1_Subfolder1_MyWebForm
Nachdem die Datei verschoben wurde:
Dateipfad: /Folder1/MyWebForm.aspx.cs
Name der Codefile-Klasse (unverändert, mit dem angezeigten Fehler):
Folder1_Subfolder1_MyWebForm
Die Lösung:
Benennen Sie Ihre Codefile - Klasse
Folder1_Subfolder1_MyWebForm
zu einem entsprechenden mit dem neuen Weg :
Folder1_MyWebForm
Auf einmal - Problem gelöst, keine Fehlermeldung ..
quelle
Hinweis: Stellen Sie sicher, dass Ihre Referenzen gemäß Ihrem DI-Container korrekt sind
quelle
In meinem Fall war das, weil ich verwendet habe
zwischen
BLL
undDAL
Klassen. Wenn ichBLL
Layer In Application Layer verwenden möchte, wurde dieser Fehler angezeigt . ich habe mich verändertzu
es ist in Ordnung. Vielen Dank
quelle
In meinem Fall war die Version der referenzierten DLL tatsächlich neuer als die, die ich zuvor hatte.
Ich musste nur auf die vorherige Version zurücksetzen und das hat es behoben.
quelle
Für mich wurde dies durch das Projekt verursacht, das sowohl direkt als auch indirekt (durch eine andere Abhängigkeit) auf zwei verschiedene Gebäude von Bouncy Castle verwies, die unterschiedliche Versammlungsnamen hatten. Einer der Bouncy Castle-Builds war das NuGet-Paket, der andere war ein Debug-Build der von GitHub heruntergeladenen Quelle. Beide waren nominell Version 1.8.1, aber die Projekteinstellungen des GitHub-Codes setzten den Assemblynamen auf BouncyCastle, während das NuGet-Paket den Assemblynamen BouncyCastle.Crypto hatte. Durch Ändern der Projekteinstellungen und damit Ausrichten der Baugruppennamen wurde das Problem behoben.
quelle
Ich habe ein ähnliches Problem und entferne die RuntimeFrameworkVersion. Das Problem wurde behoben.
Versuchen Sie, 1.1.1 oder zu entfernen
quelle
Ich hatte dieses Problem mit einer neu erstellten Lösung, die vorhandene Projekte verwendete. Aus irgendeinem Grund konnte ein Projekt kein anderes Projekt "sehen", obwohl es dieselbe Referenz wie jedes andere Projekt hatte und das referenzierte Projekt ebenfalls erstellt wurde. Ich vermute, dass es nicht erkannt wurde, was mit mehreren Ziel-Frameworks zu tun hat, weil es in einem Framework aufgebaut war, aber nicht im anderen.
Das Bereinigen und Wiederherstellen hat nicht funktioniert, und das Neustarten von VS hat nicht funktioniert.
Am Ende wurde eine "Developer Command Prompt for VS 2019" geöffnet und anschließend ein
msbuild MySolution.sln
Befehl ausgegeben . Dies wurde erfolgreich abgeschlossen und danach begann VS auch erfolgreich zu bauen.quelle
Bereinigen Sie Ihre Lösung und die Neuerstellung hat für mich funktioniert (in Visual Studio sind dies Optionen, die Sie erhalten, wenn Sie mit der rechten Maustaste in Ihren Lösungs-Explorer klicken). Der Fehler ist in meinem Projekt verschwunden.
quelle