it-swarm.com.de

Fehlermeldung 'Ein oder mehrere der angeforderten Typen können nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, um weitere Informationen zu erhalten. '

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

Es funktioniert vor Ort absolut einwandfrei, aber wenn ich das Projekt in unserer Testumgebung bereitstelle, erhalte ich die folgende Fehlermeldung:

Ein oder mehrere der angeforderten Typen können nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, um weitere Informationen zu erhalten

Stack-Trace: at System.Reflection.Module._GetTypesInternal (StackCrawlMark & ​​stackMark)

bei System.Reflection.Assembly.GetTypes ()

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

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

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

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

at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType (Typ)

at System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType (Typ type, Assembly aufrufende Assemblierung)

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

Entity Framework scheint ein Problem zu haben. Gibt es Hinweise, wie das Problem behoben werden kann?

298
The Light

Ich habe dieses Problem gelöst, indem ich das Attribut "Lokal kopieren" der Referenzen meines Projekts auf "true" gesetzt habe.

95
Mentoliptus

Dieser Fehler hat keine wahre Antwort auf die magische Kugel. Der Schlüssel ist, alle Informationen zu haben, um das Problem zu verstehen. Höchstwahrscheinlich fehlt einer dynamisch geladenen Assembly eine referenzierte Assembly. Diese Assembly muss sich im bin-Verzeichnis Ihrer Anwendung befinden. 

Verwenden Sie diesen Code, um festzustellen, was fehlt.

using System.IO;
using System.Reflection;
using System.Text;

try
{
    //The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
    StringBuilder sb = new StringBuilder();
    foreach (Exception exSub in ex.LoaderExceptions)
    {
        sb.AppendLine(exSub.Message);
        FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
        if (exFileNotFound != null)
        {                
            if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
            {
                sb.AppendLine("Fusion Log:");
                sb.AppendLine(exFileNotFound.FusionLog);
            }
        }
        sb.AppendLine();
    }
    string errorMessage = sb.ToString();
    //Display or log the error based on your application.
}
480
Ben Gripka

Eine Lösung, die für mich funktionierte, bestand darin, die Ordner bin/und obj/zu löschen und die Lösung neu zu erstellen.

47
Kenny Eliasson

Zwei mögliche Lösungen:

  1. Sie kompilieren im Freigabemodus, stellen jedoch eine ältere kompilierte Version aus Ihrem Debug-Verzeichnis (oder umgekehrt) bereit.
  2. In Ihrer Testumgebung ist nicht die richtige Version von .NET Framework installiert.
32

Wie bereits erwähnt, ist es normalerweise der Fall, dass eine Versammlung nicht da ist.

Um genau zu wissen, welche Assembly fehlt, fügen Sie Ihren Debugger an, legen Sie einen Haltepunkt fest, und wenn Sie das Ausnahmeobjekt sehen, gehen Sie zur Eigenschaft 'LoaderExceptions'. Die fehlende Versammlung sollte da sein.

Ich hoffe es hilft!

11
mkorman

Dieser Fehler ist bei einer ASP.NET 4 + SQL Server 2008 R2 + Entity Framework 4-Anwendung aufgetreten.

Es würde gut auf meinem Entwicklungscomputer (Windows Vista 64-Bit) funktionieren. Bei der Bereitstellung auf dem Server ( Windows Server 2008 R2 SP1) würde es funktionieren, bis das Zeitlimit für die Sitzung überschritten wurde. Wir stellten die Anwendung bereit und alles sah gut aus und beließ es für mehr als die 20-minütige Sitzungszeit, und dann wurde dieser Fehler ausgegeben.

Um das Problem zu lösen, habe ich diesen Code in Ken Coxs Blog verwendet, um die LoaderExceptions-Eigenschaft abzurufen. 

Für meine Situation war der fehlende DLL Microsoft.ReportViewer.ProcessingObjectModel (Version 10). Diese DLL muss im GAC des Computers installiert sein, auf dem die Anwendung ausgeführt wird. Sie finden es im Microsoft Report Viewer 2010 Redistributable Package, das auf der Microsoft-Download-Site verfügbar ist.

6
Dean

Stellen Sie sicher, dass Sie 32-Bit-Anwendungen für ISIS zulassen, wenn Sie sie auf IIS bereitstellen. Sie können dies in den Einstellungen Ihres aktuellen Anwendungspools definieren.

5
MrKhal

Wenn Sie die EntityDataSource in Ihrem Projekt verwenden, befindet sich die Lösung in Fix: 'Ein oder mehrere der angeforderten Typen können nicht geladen werden. Fehler. Sie sollten den ContextTypeName = "ProjectNameNameSpace.EntityContainerName" 'festlegen. 

Das hat meine Probleme gelöst ...

5

Die Lösung bestand darin, die LoaderException zu überprüfen: In meinem Fall fehlten einige DLL -Dateien.

 Enter image description here

4
Dev

Anfangs habe ich den Fusion-Protokoll-Viewer ausprobiert, aber das hat nicht geholfen Also habe ich WinDbg mit der Erweiterung SOS verwendet. 

! dumpheap -stat -typ Ausnahme/D

Dann habe ich die FileNotFoundExceptions untersucht. Die Nachricht in der Ausnahme enthielt den Namen der DLL, die nicht geladen wurde. 

Hinweis: Mit der Option/D erhalten Sie Hyperlinks. Klicken Sie daher in der Zusammenfassung für FileNotFoundException auf den Link. Daraufhin wird eine Liste der Ausnahmen angezeigt. Klicken Sie dann auf den Link für eine der Ausnahmen. Das wird Dumpobject diese Ausnahmen. Dann sollten Sie im Exception-Objekt nur auf den Link für Message klicken können, und Sie sehen den Text.

4
miko

Mein Fall dieses Problems endete als fehlende Referenz. Auf eine Assembly wurde in der app.config verwiesen, sie hatte jedoch keine Referenz im Projekt. 

3
SteveCav

Eine andere Lösung, um zu wissen, warum genau nichts funktioniert (von Microsoft connect):

  1. Fügen Sie diesen Code dem Projekt hinzu:

    foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
    {
        asm.GetTypes();
    }
    
  2. Deaktivieren Sie die Serialisierungsassemblys für die Generierung.

  3. Bauen und ausführen.
3
Siarhei Kuchuk

Das Hinzufügen meines spezifischen Problems/meiner Lösung dazu, da dies das erste Ergebnis dieser Fehlermeldung ist. In meinem Fall wurde der Fehler bei der Bereitstellung einer zweiten Anwendung im Ordner meiner ersten Anwendung in ISIS angezeigt. Beide definierten eine Verbindungszeichenfolge mit demselben Namen, was dazu führte, dass die untergeordnete Anwendung einen Konflikt aufwies und diese (für mich) nicht offensichtliche Fehlernachricht generierte. Es wurde gelöst durch Hinzufügen von: 

<clear/>

im Verbindungszeichenfolgenblock der untergeordneten Webanwendung, der verhindert hat, dass die Verbindungszeichenfolgen der web.config-Dateien weiter oben in der Hierarchie erben, so dass es so aussieht:

<connectionStrings>
  <clear/>
  <add name="DbContext" connectionString="MySERVER" providerName="System.Data.SqlClient" />
</connectionStrings>

Eine Referenzfrage zum Stack-Überlauf, die hilfreich war, nachdem ich festgestellt hatte, was Los war, war ERBT EINE UNTERGEORDNETE ANWENDUNG VON IHRER &UUML;BERGEORDNETEN WEB.CONFIG?.

2
Matthew

Das hat bei mir funktioniert. Fügen Sie es in Ihrer web.config hinzu

<system.web>
  <trust level="Full" />
2
Rahul Nikate

Falls Ihnen keine der anderen Antworten hilft:

Als ich dieses Problem hatte, stellte sich heraus, dass mein Windows-Dienst für eine x64-Plattform entwickelt wurde und ich versehentlich die 32-Bit-Version von InstallUtil.exe ausführte. Stellen Sie daher sicher, dass Sie die richtige Version von InstallUtil für die Plattform verwenden, für die Sie die Plattform erstellt haben.

2
jkindwall

Ich habe dieses Problem bekommen, als ich ein NuGet - Paket in einem der Projekte installiert habe und vergessen habe, das andere Projekt zu aktualisieren.

Ich habe dieses Problem gelöst, indem ich beide Projekte mit der gleichen Referenzbaugruppe gemacht habe.

1
jayson.centeno

Ich hatte das gleiche Problem (jedoch auf meinem lokalen), 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 () folgenden Code hatte:

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

Stellen Sie sicher, dass die Konfigurationsklasse die Migrationskonfiguration Ihres fehlgeschlagenen Projekts ist. Sie benötigen System.Data.Entity.Migrations, um DbMigrator verwenden zu können.

Legen Sie einen Haltepunkt in Ihrer Anwendung fest und führen Sie ihn aus. Die Ausnahme sollte von Visual Studio abgefangen werden (es sei denn, Sie haben den Ausnahmetyp so festgelegt, dass die Debug-Sitzung nicht unterbrochen wird), und Sie sollten die Informationen finden, nach denen Sie suchen.

Die fehlende Referenz in meinem Fall war EFProviderWrapperToolkit.

1
Peter Nagy

Ich hatte eine .NET 4.0, ASP.NET MVC 2.0, Entity Framework 4.0-Webanwendung, die in Visual Studio 2010 entwickelt wurde. Ich hatte das gleiche Problem, dass es an einem Windows Server 2008 R2-Server, jedoch nicht auf einem anderen Windows Server 2008 R2-Server, auch wenn die Versionen von .NET und ASP.NET MVC identisch waren und denselben Fehler wie Sie haben.

Ich folgte Mikos Vorschlag, also installierte ich Windows SDK v7.1 (x64) auf dem ausfallenden Server, damit ich! Dumpheap ausführen konnte.

Nun, es stellte sich heraus, dass die Installation von Windows SDK v7.1 (x64) das Problem gelöst hat. Die fehlende Abhängigkeit muss im SDK enthalten sein. Es kann von MICROSOFT WINDOWS SDK F&UUML;R WINDOWS 7 UND .NET FRAMEWORK 4 heruntergeladen werden.

1
Mafi Osori

Es ist auch für mich passiert. Ich habe das Problem folgendermaßen gelöst: Klicken Sie mit der rechten Maustaste auf Lösung, NuGet-Pakete für Lösung verwalten ... Konsolidieren Sie Pakete, und aktualisieren Sie die Pakete auf dieselbe Version.

1
user1760527

Mein Problem wurde behoben, nachdem ich die redundanten Assembly-Dateien aus dem Ordner bin gelöscht hatte.

1
user2814851

Andere Vorschläge sind alle gut. In meinem Fall bestand das Problem darin, dass die Entwicklerbox eine 64-Bit-Maschine war, die den x86-Speicherort verschiedener APIs verwendete, einschließlich Silverlight .

Durch Ändern der Zielplattform für den 32-Bit-Server, auf dem die Webanwendung bereitgestellt wurde, wurden die meisten Fehler behoben, die auf das Nicht-Laden eines oder mehrerer der angeforderten Typen zurückzuführen waren.

1
rclopez

Wenn Sie Entity Framework verwenden, kopieren Sie die folgenden Referenzen lokal. 

  • System.Data.Entity
  • System.Web.Entity

Ändern Sie die Eigenschaft "Copy Local" für diese Referenzen in "True" und veröffentlichen Sie sie. 

1
SameerPc

Ich habe die Spezifische Versionseigenschaft der Referenzen in false geändert und das hat geholfen.

1
Dov Miller

Bei der Eingabe von Migrationsbefehlen in der Nuget-Konsole ist dieses Problem mit dem Entity Framework aufgetreten.

das Problem zeigte sich, als ich meineOAuthAuthorizationServerProvider- Codes aus meiner Anwendung in ein Klassenbibliothekprojekt verschoben hatte, das eine Kernzugriffslogik sowie meine DBContext-Klasse enthielt.

Ich überprüfe alle meine DLLs, auf die das Klassenbibliothekprojekt verweist. und für alle (außer .net System-DLLs) CopyToLocal war es wahr, ich war völlig verwirrt.

Ich wusste, dass mit DLLs etwas nicht stimmte, nicht mit meinen Codes. Ich überprüfte sie noch einmal und bemerkte, dass ich, als ich meineApplicationOauthProviderKlasse in ein Klassenbibliothekprojekt verlegte, dieApplicationOauthProvidererbt vonOAuthAuthorizationServerProviderKlasse, die sich inMicrosoft.Owin.Security.OAuthAssembly befindet, überprüft habe Es ist die Paketversion und plötzlich ist mir aufgefallen, dass die Paketversion, die ich für das Klassenbibliothekprojekt (nicht mein Anwendungsprojekt) verwendet habe, sehr alt ist. In meiner Anwendung wurde jedoch die neueste Version (3.0.1) installiert. Daher habe ich die Version des aktualisiertMicrosoft.Owin.Security.OAuthpackage von Nuget für mein Klassenbibliothekprojekt und Problem ist weggekommen

Kurz nachdem Sie dieCopyToLocalEigenschaft Ihrer DLLs überprüft haben, überprüfen Sie auch ihre Versionen und aktualisieren Sie die alten, um die Version zu löschen

0
Code_Worm

Ich kann dieses Problem beheben, indem Sie "Copy Local = True" für alle referenzierten DLL -Dateien im Projekt markieren und auf einem Testserver neu erstellen und bereitstellen.

0
Srinivasa Rao

In meinem Fall hatte ich ein Nuget-Paket, das in meinem Projekt installiert war. Der Paketordner wurde jedoch nie in TFS eingecheckt. Auf dem Build-Computer fehlten die Bin-Dateien des Nuget-Pakets. Und daher bekam ich in der Produktion diesen Fehler. Ich musste den bin-Ordner über der Produktion mit meinem lokalen vergleichen, dann fand ich heraus, welche DLLs fehlen, und fand heraus, dass diese zu einem Nuget-Paket gehörten.

0

Ich hatte ein Problem mit Automap. Im Ordner bin war die Datei automap.4net.dll vorhanden, aber aus irgendeinem Grund waren die Dateien automap.xml und automap.dll nicht vorhanden. Durch das Kopieren in das Verzeichnis bin wurde das Problem behoben.

0
alex440

Ich hatte dieses Problem, als ich auf ein Nuget-Paket verwies und es später mit der Option remove aus meinem Projekt löschte. Nachdem ich stundenlang mit dem Problem gekämpft hatte, musste ich den Ordner löschen. Um dies zu vermeiden, ist es ratsam, Nuget zum Deinstallieren unerwünschter Pakete anstelle des üblichen Löschvorgangs zu verwenden

0
Alayo Hussein

Ich habe dieses Problem auch beim Erstellen eines neuen Microsoft Word-Add-Ins mit Visual Studio 2015 erhalten. Bei dem Problem handelt es sich um zwei Versionen von MS Office, 2013 und 2016. Ich deinstalliere MS Office 2013 und dann funktioniert es.

0
amzdmt

Ich hatte beim Kompilieren eines Visual Studio-Pakets (VSPackage) dieselbe Fehlermeldung. Die gesamte Lösung wird kompiliert und der Fehler wird ausgelöst, wenn das Paket von CreatePkgDef erstellt wird. Es ist jedoch klar, dass Ich kann die LoaderExceptions nicht abfangen, da es nicht meine Anwendung ist, die es wirft, sondern das eigene Tool von Microsoft. (Obwohl ich für die Verwirrung von CreatePkgDef verantwortlich bin.)

In meinem Fall bestand die Ursache von root darin, dass meine Lösung eine MyDll.dll erstellt, die bereits im GAC registriert ist (und sie sind unterschiedlich), sodass CreatePgkDef verwirrte, welche verwendet werden soll Es hat sich entschieden, nur einen Fehler zu werfen, der nicht wirklich hilfreich ist. Die MyDll.dll im GAC wurde vom Installationsprogramm desselben Produkts registriert (offensichtlich eine frühere Version mit/etwas/anderem Inhalt).

Wie man es repariert

  1. Bevorzugter Weg: _ ​​Stellen Sie sicher, dass Sie die korrekte Version von MyDll.dll verwenden
    1. Vergewissern Sie sich beim Kompilieren Ihres Projekts, dass Sie eine andere Versionsnummer verwenden als in der vorherigen Version im GAC. 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 Assemblynamen an (z. B. "MyDll.dll, Version = 1.0.0.1, Culture = neutral, PublicKeyToken = 1234567890abcdef"), wenn Sie in Ihren anderen Projekten darauf verweisen.
  2. Wenn das obige fehlschlug: _ ​​Sie können die alte MyDll.dll von GAC deinstallieren
    1. So deinstallieren Sie eine Assembly aus dem GAC
    2. Deinstallieren Sie die Anwendung, die MyDll.dll enthält

Die AssemblyVersion zu wechseln war für mich gut genug. :)

Ich hoffe das war hilfreich.

0
Shakaron

Ich habe eine Website über FTP aktualisiert. Ich gehe davon aus, dass die Website verwendet wurde. Beim Versuch, den Ordner "bin" zu aktualisieren, müssen einige DLL -Dateien gesperrt worden sein und wurden nicht aktualisiert. 

Dort sah ich die Fehler-500-Seite und bei Einstellung des customErrors-Modus auf Off, sah ich die vom OP erwähnte Fehlermeldung. 

Das Problem war, dass ich die Fehler nicht im FTP-Programm angezeigt habe. Ich wiederholte die fehlgeschlagenen fehlgeschlagen und sie hochgeladen. Die letzte DLL -Datei wurde aktualisiert. Also hat die Seite dann funktioniert.

0
Valamas

Stellen Sie sicher, dass jedes Ihrer Projekte in Configuration Manager korrekt eingerichtet ist.

Ähnlich wie bei William Edmondson Grund für dieses Problem habe ich meine Configuration Manager-Einstellung von "Debug" "Any CPU" auf "Debug" ".NET" geändert. Das Problem war, dass die ".NET" -Version NICHT dafür konfiguriert war, ALLE Projekte zu erstellen. Daher waren einige meiner DLLs veraltet (während andere aktuell waren). Dies verursachte zahlreiche Probleme beim Starten der Anwendung.

Die vorläufige Lösung bestand darin, Kenny Eliassons - Vorschlag auszuführen, um die Verzeichnisse\bin und\obj zu löschen. Sobald ich jedoch weitere Änderungen an den nicht kompilierenden Projekten vorgenommen habe, würde alles wieder fehlschlagen.

0
cat5dev

Ich baue einige Projekte für SharePoint und stellte sie natürlich bereit. Einmal ist es passiert.

Ich habe eine alte Assembly in C:\Windows\Assembly\temp\xxx (mit FarManager) gefunden, sie nach dem Neustart entfernt und alle Projekte erstellt.

Ich habe eine Frage an MSBuild, da in Projektassemblies wie Projektprojekte verlinkt und jede Assembly als "Copy local" markiert ist, jedoch nicht aus dem GAC.

0
Ilya

Setzen Sie den 32-Bit-Modus IIS auf true, den Debug-Modus auf true in der Konfigurationsdatei, löschen Sie das Verzeichnis temp und setzen Sie IIS zurück, um das Problem vorübergehend zu beheben Zeit.

0
johnny