414 Stimmen

Fehlermeldung 'Einer oder mehrere der angeforderten Typen können nicht geladen werden. Rufen Sie die Eigenschaft LoaderExceptions für weitere Informationen ab.'

Ich habe eine Anwendung entwickelt, die Entity Framework , SQL Server 2000, Visual Studio 2008 und Enterprise Library.

Lokal funktioniert es einwandfrei, aber wenn ich das Projekt in unserer Testumgebung bereitstelle, erhalte ich den folgenden Fehler:

Einer oder mehrere der angeforderten Typen können nicht geladen werden. Rufen Sie die Eigenschaft LoaderExceptions für weitere Informationen ab

Stack trace: at System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark)

bei System.Reflection.Assembly.GetTypes()

at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext context)

at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext context)

at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(Assembly assembly, Boolean loadReferencedAssemblies, Dictionary 2 knownAssemblies, Dictionary 2& typesInLoading, List`1& errors)

at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies)

at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType(Type type)

at System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType(Type type, Assembly callingAssembly)

at System.Data.Objects.ObjectContext.CreateQuery[T](String queryString, ObjectParameter[] parameters)

Entity Framework scheint ein Problem zu haben, gibt es einen Hinweis, wie man es beheben kann?

1voto

Peter Nagy Punkte 11

Ich hatte das gleiche Problem (aber auf meinem lokalen Rechner), als ich versuchte, die Entity Framework-Migration mit der Package Manager Console hinzuzufügen.

Ich habe das Problem gelöst, indem ich eine Konsolenanwendung erstellt habe, in der Main() den folgenden Code enthielt:

 var dbConfig = new Configuration();
 var dbMigrator = new DbMigrator(dbConfig);
 dbMigrator.Update();

Vergewissern Sie sich, dass die Konfigurationsklasse die Migrationskonfiguration Ihres fehlgeschlagenen Projekts ist. Sie benötigen System.Data.Entity.Migrations, um DbMigrator zu verwenden.

Setzen Sie einen Haltepunkt in Ihrer Anwendung, und führen Sie sie aus. Die Ausnahme sollte von Visual Studio abgefangen werden (es sei denn, Sie haben den Ausnahmetyp so eingestellt, dass die Debug-Sitzung nicht unterbrochen wird), und Sie sollten in der Lage sein, die gesuchten Informationen zu finden.

Die fehlende Referenz in meinem Fall war EFProviderWrapperToolkit.

1voto

user1760527 Punkte 1104

Das ist auch bei mir passiert. Ich habe das Problem wie folgt gelöst: Rechtsklick auf Solution, Manage NuGet Packages for Solution... Konsolidieren Sie die Pakete und aktualisieren Sie die Pakete, damit sie die gleiche Version haben.

1voto

Shakaron Punkte 897

Ich hatte die gleiche Fehlermeldung beim Kompilieren eines Visual Studio-Pakets (VSPackage). Die gesamte Lösung wird kompiliert und der Fehler wird bei der Erstellung des Pakets durch CreatePkgDef ausgelöst. Dies vorausgeschickt, ist es klar, dass Ich kann die LoaderExceptions nicht abfangen denn es ist nicht meine Anwendung, die den Fehler verursacht, sondern Microsofts eigenes Tool. (Obwohl ich für die Verwirrung von CreatePkgDef verantwortlich bin).

In meinem Fall ist die Grundlegende Ursache war, dass meine Lösung eine MyDll.dll erstellt, die bereits in der Datenbank registriert ist. GAC (und sie sind unterschiedlich), so dass die CreatePgkDef verwirrt, welche zu verwenden und es beschlossen, nur um einen Fehler zu werfen, die nicht wirklich hilfreich ist. Die MyDll.dll im GAC wurde vom Installationsprogramm desselben Produkts registriert (offensichtlich eine frühere Version, mit /leicht/ anderem Inhalt).

Wie man es repariert

  1. Bevorzugter Weg: Stellen Sie sicher, dass Sie die richtige Version von MyDll.dll verwenden
    1. Wenn Sie Ihr Projekt kompilieren, stellen Sie sicher, dass Sie eine andere Versionsnummer verwenden als in der vorherigen Version, die sich im GAC befindet. Stellen Sie sicher, dass die folgenden Attribute korrekt sind:
      • [assembly: AssemblyVersion("1.0.0.1")] // Angenommen, die alte DLL-Datei hatte die Version 1.0.0.0
      • [assembly: AssemblyFileVersion("1.0.0.1")] // Angenommen, die alte DLL-Datei hatte die Version 1.0.0.0
    2. Geben Sie bei Bedarf den vollständig qualifizierten Assembly-Namen an (z. B. "MyDll.dll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=1234567890abcdef"), wenn Sie in Ihren anderen Projekten darauf verweisen.
  2. Wenn die oben genannten Maßnahmen fehlgeschlagen sind: Sie können die alte MyDll.dll aus dem GAC deinstallieren
    1. Deinstallation einer Baugruppe aus dem GAC
    2. Deinstallieren Sie die Anwendung, die MyDll.dll enthält

Die Änderung der AssemblyVersion war für mich ausreichend :)

Ich hoffe, das war hilfreich.

1voto

Obi-Wan Kenobi Punkte 41

Ich hatte dieses Problem, als ich auf ein Nuget-Paket verwies und es später mit der Option remove aus meinem Projekt löschte. Ich musste den Bin-Ordner löschen, nachdem ich stundenlang mit diesem Problem gekämpft hatte. Um dies zu vermeiden, ist es ratsam, unerwünschte Pakete mit Nuget zu deinstallieren und nicht mit dem üblichen Löschen

1voto

rclopez Punkte 11

Die anderen Vorschläge sind alle gut. In meinem Fall bestand das Problem darin, dass die Entwicklerbox ein 64-Bit-Rechner war, der den x86-Speicherort verschiedener APIs verwendet, darunter Silberlicht .

Durch die Änderung der Zielplattform auf den 32-Bit-Server, auf dem die Webanwendung bereitgestellt wurde, konnte die Mehrzahl der Fehler behoben werden, die darauf zurückzuführen waren, dass einer oder mehrere der angeforderten Typen nicht geladen werden konnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X