it-swarm.com.de

Visual Studio - Fehler "Die Metadatendatei 'XYZ' wurde nicht gefunden" nach der Bearbeitung wird fortgesetzt

Ich bin über ein Problem gestolpert, das wirklich nervt.
Wenn ich meine Software debugge, läuft alles in Ordnung. Wenn ich jedoch einen Haltepunkt erreiche und den Code bearbeite, erhalte ich beim Versuch, die Ausführung fortzusetzen, folgende Fehlermeldung:
Metadata file 'XYZ' could not be found

Nachdem ich mich eine Weile umgesehen hatte, fand ich einige ähnliche Probleme , aber sie betrafen alle einen Buildfehler, was nicht mein Fall ist (dies geschieht erst nach edit-continue).

Was ich bisher ausprobiert habe:

  • Mein Code wird kompiliert und ausgeführt.
  • Ich habe die Lösung gereinigt und VS neu gestartet.
  • Ich habe sichergestellt, dass das Projekt der fehlenden Datei für die von mir ausgeführte Konfiguration (in Configuration Manager) erstellt wird.
  • Ich habe das Projekt der fehlenden Datei manuell erstellt.

Einige zusätzliche Informationen :

  • Es ist egal, was ich ändere, trotzdem wird derselbe Fehler angezeigt (die Änderung bezieht sich nicht auf die fehlende Datei).
  • Das passiert auch, wenn ich pausiere und weitermache (nicht nur Haltepunkte)
  • Ich führe das Projekt mit einer benutzerdefinierten Konfiguration aus (Konfigurationsmanager ...). Wenn ich es mit der Standardkonfiguration Debug ausführe, tritt der Fehler nicht auf.

Irgendwelche Ideen?

71
Avi Turner

Was das Problem schließlich löste, war:

  1. Bereinigen Sie jedes Projekt einzeln (Rechtsklick> Bereinigen).
  2. Erstellen Sie jedes Projekt einzeln neu (Rechtsklick> Neu erstellen).
  3. Erstellen Sie das Startprojekt neu.

Aus irgendeinem Grund hatte die Reinigung der Lösung einen anderen Effekt als die gezielte Reinigung jedes einzelnen Projekts.

Edit:
Laut @maplemale-Kommentar scheint es manchmal auch erforderlich zu sein, jeden Verweis zu entfernen und erneut hinzuzufügen.

pdate 2019:
Diese Frage stieß in der Vergangenheit auf reges Interesse, doch seit der Veröffentlichung von VS 2017 scheint sie viel weniger Beachtung zu finden.
Also ein weiterer Vorschlag wäre - Update auf eine neuere Version von VS (> = 2017) und neben anderen neuen Funktionen wird auch dieses Problem behoben

102
Avi Turner

Soweit ich das beurteilen kann, geschieht dies, wenn die Projektabhängigkeiten aus irgendeinem Grund durcheinander gebracht werden (während alle projektübergreifenden Referenzen noch intakt sind). In vielen Fällen handelt es sich NICHT um ein Codeproblem. Und für diejenigen, die mehr als ein paar Projekte haben, ist es NICHT akzeptabel, sie einzeln durchzuarbeiten.

Es ist einfach, Projektabhängigkeiten zurückzusetzen -

  1. Wählen Sie alle Projekte aus und klicken Sie mit der rechten Maustaste auf Entladen
  2. Wählen Sie alle Projekte aus und klicken Sie mit der rechten Maustaste auf "Neu laden"
  3. Lösung neu erstellen

Für diejenigen, die ein Problem in ihrem Code oder ein anderes Problem haben, das dieses Problem verursacht, müssen Sie dieses Problem offensichtlich zuerst lösen.

41
Ben Wilde

Ein möglicher Grund könnte sein, dass Sie einige Ihrer Projekte (in der Lösung) auf eine höhere Version aktualisiert haben, z. von .NET 4.0 auf 4.5 Dies geschah in meinem Fall, als ich die Lösung in VS 2013 öffnete (ursprünglich mit VS 2010 und .NET 4.0 erstellt). Als ich in VS 2013 öffnete, wurde mein C++ - Projekt auf .NET 4.5 aktualisiert und ich fing an, das Problem zu erkennen.

13
JSK

Im Allgemeinen ist diese Art von Fehler auf menschliche Fehler zurückzuführen, z. B. wenn wir den Namespace auf eine falsche Weise ändern oder die Ordnernamen aus dem Explorer für das aktuelle Projekt usw. ändern, wobei der Compiler dies manchmal nicht erkennen kann.

Ich bin auf den gleichen Fehler gestoßen, den ich in wenigen Schritten behoben habe. Bitte befolgen Sie alle Schritte:

  1. Ganze Lösung reinigen
  2. Klicken Sie mit der rechten Maustaste auf jedes Projekt in Ihrer Projektmappe. Gehen Sie zu Eigenschaften, und geben Sie Ihren Standardnamespace sowie den Standardassemblynamen wie in Ihrem Code an (d. H. Namespace vor Klassenname).
  3. Überprüfen Sie die Ordnernamen für jedes Projekt, indem Sie den Explorer durchsuchen (wo sich Ihre Projektlösung befindet). Wenn es nicht mit Ihren Projektnamen übereinstimmt, machen Sie es ihnen ähnlich (wie Schritt 2).
  4. Entfernen Sie alle Ihre Referenzen aus jedem Projekt, das für ein anderes Projekt derselben Lösung relevant ist, und fügen Sie es erneut hinzu.
  5. In Ihrem Project Solution-Ordner finden Sie die Visual C # -Projektdatei. Rechtsklick und mit Notepad öffnen. In Ihren Anfangszeilen würden Sie nach Zeilen für jedes Projekt wie folgt suchen:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}" EndProject

Überprüfen Sie noch einmal die Ordnernamen (ich habe sie fett hervorgehoben) und machen Sie sie ähnlich wie in Schritt 2.

  1. Reinigen Sie die gesamte Lösung erneut

  2. Erstellen Sie die Lösung (Wenn dies nicht funktioniert, versuchen Sie, nach einer erneuten Reinigung eine individuelle Lösung zu erstellen.)

10
Pratik Shah

Stellen Sie sicher, dass alle abhängigen Projekte dieselbe .NET Framework-Version verwenden. Ich hatte das gleiche Problem, das durch ein abhängiges Projekt mit 4.5.1 verursacht wurde, während alle anderen 4.5 verwendeten. Durch Ändern des Projekts von 4.5.1 auf 4.5 und Neuerstellen meiner Lösung wurde dieses Problem für mich behoben.

7
Mark Stratman

XYZ konnte nicht gefunden werden, da es noch nicht erstellt wurde ....

Klicken Sie mit der rechten Maustaste auf die Projektmappe und aktivieren Sie das Kontrollkästchen Projektabhängigkeiten. Die Projekterstellungsreihenfolge sollte sich auch entsprechend den festgelegten Abhängigkeiten ändern.

4
Roberto

Das einzige, was bei mir funktioniert hat, war, die Benutzeroptionen der Lösung zu löschen (.suo) Datei . Beachten Sie, dass dies eine versteckte Datei ist.

Um diese Datei zu finden, schließen Sie Ihr Virsual Studio und suchen Sie im Datei-Explorer Ihres Projekts nach .suo.

Delete the .suo file

PS: Eine neue .suo-Datei wird erneut erstellt, wenn Sie Ihr Projekt neu erstellen, und hoffentlich wird diese neu erstellte Datei Ihnen keine Probleme bereiten.

Ich hoffe das hilft jemandem diesen nervigen Fehler loszuwerden :).

3
Tshilidzi Mudau

Nun, meine Antwort ist nicht nur die Zusammenfassung aller Lösungen, sondern bietet noch mehr.

Abschnitt 1):

In allgemeinen Lösungen:

Ich hatte 4 Fehler dieser Art ("Metadatendatei konnte nicht gefunden werden") und 1 Fehler mit der Meldung "Quelldatei konnte nicht geöffnet werden (" Nicht angegebener Fehler ").

Ich habe versucht, den Fehler zu beseitigen, dass die Metadatendatei nicht gefunden wurde. Dafür habe ich viele Posts, Blogs usw. gelesen und festgestellt, dass diese Lösungen möglicherweise effektiv sind (hier zusammengefasst):

Starten Sie VS neu und versuchen Sie es erneut.

Gehen Sie zu "Solution Explorer". Klicken Sie mit der rechten Maustaste auf Lösung. Gehen Sie zu Eigenschaften. Wechseln Sie zu "Configuration Manager". Überprüfen Sie, ob die Kontrollkästchen unter "Erstellen" aktiviert sind oder nicht. Wenn einige oder alle deaktiviert sind, überprüfen Sie sie und versuchen Sie es erneut.

Wenn die oben genannten Lösungen nicht funktionieren, befolgen Sie die in Schritt 2 beschriebene Reihenfolge. Deaktivieren Sie die Kontrollkästchen, und versuchen Sie erneut, die Erstellung fortzusetzen, auch wenn alle Kontrollkästchen aktiviert sind.

Build Order und Projektabhängigkeiten:

Gehen Sie zu "Solution Explorer". Klicken Sie mit der rechten Maustaste auf Lösung. Gehen Sie zu 'Projektabhängigkeiten ...'. Sie sehen 2 Registerkarten: "Abhängigkeiten" und "Erstellungsreihenfolge". Diese Erstellungsreihenfolge ist diejenige, in der die Lösung erstellt wird. Überprüfen Sie die Projektabhängigkeiten und die Erstellungsreihenfolge, um zu überprüfen, ob ein Projekt (z. B. 'project1'), das von einem anderen abhängig ist (z. B. 'project2'), versucht, vor diesem zu erstellen (project2). Dies könnte die Ursache für den Fehler sein.

Überprüfen Sie den Pfad der fehlenden DLL:

Überprüfen Sie den Pfad der fehlenden DLL. Wenn der Pfad ein Leerzeichen oder ein anderes ungültiges Pfadzeichen enthält, entfernen Sie es und versuchen Sie es erneut.

Wenn dies die Ursache ist, passen Sie die Erstellungsreihenfolge an.

2

Ich hatte dieses Problem seit Tagen! Ich habe alles versucht, aber das Problem ist immer wieder aufgetaucht. Wenn diese Meldung angezeigt wird, hat sie möglicherweise die Bedeutung "Ein oder mehrere Projekte in Ihrer Lösung wurden nicht sauber kompiliert", sodass die Metadaten für die Datei nie geschrieben wurden. Aber in meinem Fall habe ich keinen der anderen Compilerfehler gesehen !!! Ich habe weiterhin versucht, jede Lösung manuell zu kompilieren, und erst nachdem VS2012 einige Compilerfehler enthielt, die ich vorher nicht gesehen hatte, verschwand dieses Problem.

Ich habe mit Build-Aufträgen, keinen Build-Aufträgen, Verweisen auf Debug-DLLs (die manuell kompiliert wurden) herumgespielt ... NICHTS schien zu funktionieren, bis ich diese Fehler fand, die beim Kompilieren der gesamten Lösung nicht auftauchten !!!!

Manchmal scheint es beim Kompilieren so zu sein, dass der Compiler bei einigen Fehlern existiert ... Ich habe dies in der Vergangenheit gesehen, als nachfolgende Kompilierungen nach dem Beheben von Problemen NEUE Fehler aufwiesen. Ich weiß nicht, warum es passiert und es ist etwas selten für mich, diese Probleme zu haben. Wenn Sie sie jedoch so haben, ist es ein echtes Problem, herauszufinden, was los ist. Viel Glück!

2
John Peters

Verwenden Sie in Ihrem Projekt ein Tool zur Generierung von Datenbankcode wie SQLMETAL?

In diesem Fall stehen Sie möglicherweise vor einem Problem mit pluralisierten und nicht pluralisierten Übergängen.

In meinem Fall habe ich festgestellt, dass einige alte pluralisierte (*) Tabellennamen (auf denen SQLMETAL standardmäßig einen " s " - Buchstaben am Tabellenverweise auf Klassen, die von SQLMETAL generiert wurden.

Da ich kürzlich die Pluralisierung von Namen deaktiviert habe , haben einige von ihnen nach der Registrierung einiger datenbankbezogener Klassen ihre " s "Präfix. Daher wurden alle Verweise auf betroffene Tabellenklassen ungültig. Aus diesem Grund habe ich verschiedene Kompilierungsfehler wie die folgenden:

'xxxx' enthält keine Definition für 'TableNames' und es konnte keine Erweiterungsmethode 'TableNames' gefunden werden, die ein erstes Argument vom Typ 'yyyy' akzeptiert (fehlt eine using-Direktive oder eine Assembly-Referenz?)

Wie Sie wissen, nehme ich nur Fehler an, um zu verhindern, dass eine Assembly kompiliert wird. Und das heißt, die fehlende Assemblierung kann mit abhängigen Assemblys verknüpft werden, wodurch die ursprüngliche "Metadatendatei 'XYZ' nicht gefunden werden konnte".

Nachdem ich die Referenzen der betroffenen Klassentabellen manuell auf ihre aktuellen Namen korrigiert hatte (unpluralisiert), konnte ich mein Projekt endlich wieder zum Leben erwecken!

(*) Wenn Option Visual Studio> Menü Extras > Optionen > Datenbanktools > O/R Designer > Die Pluralisierung von Namen ist aktiviert. Einige SQLMETALl-Codegeneratoren fügen am Ende von " s " ein Einige generierte Tabellenklassen, obwohl die Tabelle in der Zieldatenbank kein Suffix "s" enthält. Weitere Informationen finden Sie unter http://msdn.Microsoft.com/en-us/library/bb386987 (v ​​= vs.110) .aspx

Ich hoffe es hilft!

1
Julio Nobre

Meine 5 Cent.

Dieses Problem begann nach einer lösungsübergreifenden Bereinigung.

Ich habe es geschafft, das Problem zu beheben, indem ich die Active Solution-Konfiguration unter Build -> Configuration Manager zum Freigeben festgelegt habe. Erstellen Sie es dann und setzen Sie es zurück, um erneut zu debuggen. Der Build war danach erfolgreich.

1
Yeronimo

Ich hatte diesen Fehler aufgetaucht. Ich habe hier alle Lösungen verfolgt, aber nichts hat funktioniert. Ich habe Visual Studio 2013 Professional verwendet. Ich konnte die einzelnen Projektwiederherstellungen nicht zum Laufen bringen und stellte schließlich fest, dass meine Referenzen ein zirkuläre Abhängigkeit enthielten. Normalerweise warnt Visual Studio Sie recht gut, wenn Sie einen Verweis auf etwas hinzufügen, das auf etwas zurückweist, aber aus irgendeinem Grund war dies in diesem Fall nicht der Fall. Ich habe einen Verweis auf ein Projekt hinzugefügt, das auf das Projekt verweist, an dem ich arbeite - und es hat ihn akzeptiert. VS Bug vielleicht?

1

Schließen Sie VS, suchen Sie den Ordner "packages" und entfernen Sie ihn von außerhalb von Visual Studio. Starten Sie VS neu und erstellen Sie -> alle Abhängigkeiten werden neu installiert

1
tfa

Ich hatte das gleiche problem In meinem Fall hatte ich versehentlich alle Projekte vom Projekt mit der Hauptmethode als Konsolenanwendung abgegrenzt.

Um das Problem zu lösen, ging ich zu jedem anderen Projekt als dem mit der Hauptfunktion und Rechtsklick> Eigenschaften> Ausgabetyp> Klassenbibliothek

0
diva

Bei einem neuen Build sind möglicherweise einige Abhängigkeiten nicht installiert. Für mich war es Crystal Reports.

0
Roberto

es ist mir passiert, weil ich einen seltsamen Konflikt in den Namespaces habe: Ich hatte AssemblyA mit dem Namespace AssemblyA.ParentNamespace, der ClassA definiert, und in derselben Assembly einen anderen Namespace mit dem Namen AssemblyA.ParentNamespace.ChildNamespace, der eine andere ClassA definiert (aber mit dem gleicher Name)

Ich hatte dann in AssemblyA.ParentNamespace IInterfaceB, das eine Methode hatte, die am Anfang IEnumerable zurückgibt, und ein ClassB, das IInterfaceB implementiert

Ich hatte später die Methode in ClassB geändert, um IEnumerable zurückzugeben, aber ich habe vergessen, die IInterfaceB-Definition zu aktualisieren, so dass die Methode dort immer noch IEnumerable zurückgab verweist AssemblyA funktioniert nicht und gibt den Fehler "Metadaten-Datei konnte nicht gefunden werden" zurück.

das Aktualisieren von InterfaceB, um IEnumerable korrekt zurückzugeben, da sein Implementierer ClassB das Problem behoben hat. Leider war die Fehlermeldung vage und auch die Tatsache, dass die Kompilierung funktioniert hat, lässt mich vermuten, dass möglicherweise etwas im Compiler zu beheben ist

0
Mosè Bottacini

Es passiert, wenn eine Projekt-DLL ausfällt und auf diese durch die Anzahl der Projekte verwiesen wird. Also erst reparieren und dann Individuen bauen.

0

dies geschieht aufgrund der unterschiedlichen Namen im Ordnernamen und im Namespace-Namen. Wenn Sie einen Namespace mit einem bestimmten Namen erstellen und ihn später umbenennen, erhält der Namespace den alten Namen. Und die Kompilierung verwendet den alten Pfad, um die Dateien .dll Und .exe Zu finden. Um dies zu vermeiden, öffnen Sie die Datei .csproj Jedes Namespaces mit einer Textdatei und suchen Sie den alten Pfad in der Datei.

entfernen Sie diese, reinigen Sie die Lösung und erstellen Sie sie neu. Das hat bei mir funktioniert. Ich habe einen ganzen Tag an diesem Problem gearbeitet.

0
Sooraj Chandran

Ein Mitarbeiter stieß auf dieses Problem und die Ursache entging uns. Schließlich stellten wir fest, dass das Projektverzeichnis (und damit der Pfad zu den NuGet-Paketen) %20 (danke, ein Git-GUI-Tool, das nicht genannt werden soll) und die Fehlermeldungen zeigten, dass der Compiler nach einem sehr ähnlich aussehenden Pfad suchte, der jedoch %20, eher ein Leerzeichen. Anscheinend führt irgendwo etwas im Build-System eine HTML-Dekodierung auf lokalen Dateisystempfaden durch.

Das Arbeitskopienverzeichnis wurde umbenannt und alles begann zu funktionieren.

0
Ben Voigt

Ich hatte dies und schaffte es, es mit diesem zu beheben SO Antwort: Metadatendatei '.dll' konnte nicht gefunden werden

Ich musste alle Kontrollkästchen deaktivieren, auf Übernehmen klicken, alle Kontrollkästchen wieder aktivieren und dann erneut auf Übernehmen klicken, aber das Problem wurde behoben.

0
Karl Gjertsen

Ich hatte dieses Problem und es hat begonnen, nachdem unsere Lösung als neues Projekt in TFS importiert wurde. Ich bin auf dieses Thema gestoßen und habe eine schnelle Lösung gefunden, die sich von Ihren Antworten inspirieren ließ.

Alles, was ich tun musste, ist, das Projekt neu zu erstellen, das angeblich seine Metadatendatei und Voila verloren hat. Problem behoben.

0
Enver A

Ich bin gerade auf dieses Problem gestoßen, und nach einer Stunde des Herumschraubens wurde mir klar, dass ich meinem Produkt eine aspx -Datei hinzugefügt hatte, die denselben Namen hatte wie eine meiner Linq-To-Sql = Klassen.
Klasse und Seite wo "Queue".
Die Seite wurde in QueueMgr.aspx geändert, und alles ist in Ordnung.

0
Ted Krapf

Es gibt auch einen anderen dummen Grund, den Sie mit Geduld überprüfen sollten ... wie es mir einfiel, nachdem ich 4 Stunden auf der Suche nach Antworten verschwendet hatte:

Die Geschichte für mich war, dass ich versehentlich eine kleine Codezeile unter Tausenden von C # -Klassendateien geändert und dann versucht habe, die Lösung neu zu erstellen. Wie Sie sich vorstellen können, hatte ich am Ende mehr als 40 fehlende Fehler in der Metadatendatei und einen Kompilierungsfehler darunter - den ich nicht sorgfältig überprüft habe, da ich dachte, dass alle Fehler gleich waren!

nachdem ich 4 Stunden lang meine Fehlerliste durchsucht und dann versehentlich noch einmal überprüft hatte, fand ich diesen albernen Codefehler, behebte ihn, kompilierte ihn und der Fehler verschwand.

Keine gute Antwort auf Ihr Problem, aber hoffen Sie, dass mein Fall für Sie nicht derselbe war.

0
Lida Weng