2012-04-04 7 views
2

Assembly.GetTypes() löst eine ReflectionTypeLoadException aus, wenn Typen vorhanden sind, die nicht geladen werden können.Assembly.GetTypes() - Abrufen der Typen, die nicht geladen werden können

Diese Ausnahme verfügt über eine types [] -Eigenschaft, die die Typen auflistet, die erfolgreich geladen wurden, und eine LoaderExceptions [] -Eigenschaft, die die Ausnahmen für Typen auflistet, die nicht geladen werden konnten.

Meine Frage: Wie bekomme ich die Typen selbst, die den LoaderExceptions entsprechen?

Edit: Ich bin eigentlich auf der Suche nach Name des Typs, der nicht geladen wurde. Sorry für irgendeine Verwirrung dort.

+0

müssen Sie die LoaderExceptions auflösen. was sind Sie? –

+0

hast du dir das angeschaut http://stackoverflow.com/questions/2658275/c-sharp-assembly-gettypepes-reflectyteloadexception - das scheint ein merkwürdiger Fehler zu sein, was du genau machst, wo die Assembly herkommt, ist es deins oder 3rd Party etc. Haben Sie einen Reflektor oder ähnliches versucht. – NSGaga

+0

LoaderExceptions sind in diesem Fall FileLoadExceptions und treten nur auf dem Computer eines Endbenutzers auf, auf den ich keinen Zugriff habe. Die FileLoadException ist auf einer 3rd-Party-DLL. Ich muss im wahrsten Sinne des Wortes einen Produktions-Build erstellen und diesen Typ dazu bringen, es auszuführen. Es scheitert nur, mehr Logs zu bekommen, damit ich debuggen kann. Es waren 3 Runden davon, um so viele Informationen herauszubekommen. –

Antwort

4

Dies ist einfach nicht möglich. Die CLR konnte die Type Objekte nicht erstellen, weshalb Sie den Satz LoaderExceptions erhalten haben. Es gibt einfach kein Type Objekt, um eine Type zu beschreiben, die nicht geladen werden konnte.

+0

Gut genug, ich hätte es so formulieren sollen wie "Wie bekomme ich die Typnamen der Typen, die nicht geladen werden konnten?" In diesem Fall haben die LoaderExceptions FileLoadExceptions, denen ein Fusionsprotokoll zugeordnet ist, aber leider konnte nichts, was "Peters.BrokenClass" sagt, aufgrund dieser Ausnahme geladen werden: .. nur diese Assembly Something.From.MS.dll konnte nicht geladen werden ... –

+0

@PeterDrier ist es eine frustrierende Ausnahme, mit zu arbeiten. Normalerweise verwende ich einfach Fuslogvw, um die Fehler aufzuspüren, da es gelegentlich etwas hilfreichere Informationen gibt http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.71).aspx – JaredPar

+0

Wenn ich nur Zugang zu der Maschine hätte, die das Problem hat. Es ist draußen auf dem Feld, und der Benutzer ist nicht einer unserer glücklicheren. Die einzige echte Option besteht darin, zusätzliches Debugging einzuprogrammieren und genügend Ergebnisse auf dem Server zurückzumelden, um das Problem hoffentlich zu lösen. –

0

Dieser Fehler tritt meistens auf, wenn die Dll, die Sie von einem Speicherort geladen haben, bereits in Ihrer Anwendung oder übergeordneten Anwendung angegeben wurde. Wenn die Dll bereits in Referenz ist, durchlaufen Sie die Assemblies Ihrer Anwendung.

foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
     if (asm.ManifestModule.FullyQualifiedName.EndsWith("YourDllName.dll")) 
     { 
      foreach (var Type in asm.GetTypes()) 
      { 
        // Apply your logic here 
      }     
      break; 
     } 
}