Fehler „Metadata file .dll could not be found“: So beheben Sie ihn in C#

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

„Metadata file '.dll' could not be found“: Warum passiert das und wie geht man damit um?

\n\n

Wenn Sie jemals in C# programmiert und ein Projekt in Visual Studio oder über die Befehlszeile erstellt haben, sind Sie mit Sicherheit auf diese erschreckende rote Meldung im Fehlerfenster gestoßen:

\n\n
Error CS0006: Metadata file '.dll' could not be found
\n\n

Geben Sie zu, das sieht bedrohlich aus. Besonders, wenn das Projekt gestern noch gebaut hat und heute nicht mehr. Oder wenn Sie ein Repository von GitHub geklont haben, auf Build geklickt haben und dann das passiert. Dieser Fehler ist ein echter „Klassiker“ auf Stack Overflow (tausende Aufrufe, hunderte Antworten), und das nicht ohne Grund: Er kann dutzende verschiedene Ursachen haben. In diesem Artikel werden wir drei grundlegende Ansätze zur Behebung behandeln, vom Einfachen zum Komplexen, und lernen, nicht nur die „Symptome zu behandeln“, sondern die Ursache des Problems zu verstehen.

\n\n

Was bedeutet „Metadata file could not be found“ überhaupt?

\n\n

Lassen Sie es uns einfach erklären. Wenn der C#-Compiler (csc.exe oder msbuild) Ihr Projekt erstellt, muss er wissen, welche Typen, Methoden und Eigenschaften in den Assemblies vorhanden sind, auf die Sie verweisen. Dazu liest er die Metadaten aus den DLL-Dateien. Wenn die DLL nicht im angegebenen Pfad vorhanden ist, kann der Compiler nicht überprüfen, ob Sie die Methoden korrekt aufrufen, und gibt den Fehler CS0006 aus.

\n\n

Meistens liegt das Problem an einer von drei Sachen:

\n
    \n
  • Der Verweis auf das Projekt oder die DLL ist nicht korrekt konfiguriert — Sie haben einen falschen Pfad angegeben.
  • \n
  • Das abhängige Projekt wurde nicht erstellt — seine DLL existiert einfach nicht.
  • \n
  • Das NuGet-Paket wurde nicht wiederhergestellt — die DLL liegt im Ordner packages, ist aber nicht da.
  • \n
\n\n

Los geht's mit der Analyse der einzelnen Fälle.

\n\n

Ansatz 1: Überprüfung der Projektverweise (Project References)

\n\n

Das häufigste Szenario: Sie haben eine Projektmappe (Solution) mit mehreren Projekten, und ein Projekt verweist auf ein anderes. Zum Beispiel verweist eine Webanwendung auf eine Klassenbibliothek MyLibrary.csproj. Wenn diese Bibliothek nicht erstellt wurde, erhalten Sie den Fehler:

\n\n
Metadata file '..\\MyLibrary\\bin\\Debug\\MyLibrary.dll' could not be found
\n\n

Was tun?

\n

Überprüfen Sie als Erstes, ob das abhängige Projekt selbst erstellt werden kann. Klicken Sie mit der rechten Maustaste auf das Projekt MyLibrary im Projektmappen-Explorer und wählen Sie Neu erstellen. Wenn es nicht erstellt wird, suchen Sie nach Fehlern darin.

\n\n

Zweitens: Die Build-Reihenfolge. Visual Studio legt Abhängigkeiten normalerweise automatisch fest, aber wenn Sie msbuild über die Befehlszeile verwenden, kann die Reihenfolge durcheinandergeraten. Stellen Sie sicher, dass das abhängige Projekt in der Projektmappendatei (.sln) oder in der Build-Reihenfolge zuerst kommt.

\n\n

Drittens: Die Build-Konfiguration. Überprüfen Sie, ob beide Projekte in derselben Konfiguration (Debug/Release) und für dieselbe Plattform (Any CPU / x64 / x86) kompiliert werden. Manchmal wird eine Bibliothek für Any CPU erstellt, das Hauptprojekt aber für x64, und die Pfade zur DLL weichen ab.

\n\n
// Beispiel für einen Verweis in .csproj (altes Format)\n<Reference Include="MyLibrary">\n  <HintPath>..\\MyLibrary\\bin\\$(Configuration)\\MyLibrary.dll</HintPath>\n</Reference>\n\n// Moderner SDK-Stil (einfacher)\n<ProjectReference Include="..\\MyLibrary\\MyLibrary.csproj" />
\n\n

Tipp: Verwenden Sie immer ProjectReference anstelle von Reference mit einem festen Pfad – das löst automatisch 90% der Probleme beim Auffinden von DLLs.

\n\n

Ansatz 2: Wiederherstellung von NuGet-Paketen

\n\n

Der zweithäufigste Grund ist das Fehlen von DLLs aus NuGet-Paketen. Sie haben dem Projekt Newtonsoft.Json über NuGet hinzugefügt, aber nach dem Klonen des Repositorys oder dem Wechsel des Branches ist der Ordner packages leer (oder existiert gar nicht, wenn Sie PackageReference verwenden).

\n\n

Der Fehler sieht dann so aus:

\n\n
Metadata file '..\\packages\\Newtonsoft.Json.12.0.3\\lib\\net45\\Newtonsoft.Json.dll' could not be found
\n\n

Lösung – Pakete wiederherstellen

\n

In Visual

Blogs

Buchempfehlungen