2016-05-13 4 views
0

ich laden haben den folgenden Code ein, dass Loades alle aseemblies, die durch meine porject refrenced sind und alle von ihnen benutzten referenziertenReflection kann nicht ein oder> mehrere der angeforderten Typen

var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()) 
         .Where(t => t.IsClass && !t.IsAbstract && (typeof (MyType).IsAssignableFrom(t))); 


foreach (var type in types.Where(type => typeof (MyType).IsAssignableFrom(type))) 
       {... do something ...} 

Auf meinem Dev-Box das funktioniert, wie erwartet, auf einer anderen Umgebung verursacht dies eine Ausnahme

System.Reflection.ReflectionTypeLoadException: Kann eine oder mehrere der angeforderten Typen laden. Rufen Sie die LoaderExceptions-Eigenschaft für weitere Informationen auf.

Warum wird diese Ausnahme ausgelöst? ist es möglich, meinen Code so umzuformatieren, dass die Ausnahme ignoriert wird?

+0

gehen, dass 'LoaderExceptions' Eigenschaft suchen dann oder ....? – asawyer

+0

Verwenden Sie so etwas, um es auszugeben 'catch (ReflectionTypeLoadException e) {neue Exception werfen (string.Format (" Fehler beim Laden des Typs aufgrund der folgenden: {0} {1} {0} ", Environment.NewLine, string. Join (Environment.NewLine, e.LoaderExceptions.Select (le => le.ToString()). ToArray()))); } ' – asawyer

+0

Leider habe ich keinen Zugriff auf die Umgebung, in der dies für die nächsten paar Tage aufgetreten ist. Also versuche es blind zu lösen –

Antwort

1

Ich hatte genau das gleiche Problem, aber die Assembly, mit der es Probleme gab, kümmerte mich nicht wirklich darum.

ging ich von dieser (arbeitete vor Ort):

Type t = AppDomain.CurrentDomain.GetAssemblies() 
       .SelectMany(a => a.GetTypes()) 
       .Where(a => a.FullName == clientEx.ExceptionType) 
       .FirstOrDefault(); 

Um dies:

Type t = null; 

foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    try 
    { 
     foreach (Type type in a.GetTypes()) 
     { 
      if (type.FullName == clientEx.ExceptionType) 
      { 
       t = type; 
       break; 
      }            
     } 

     if (t != null) 
      break; 
    } 
    catch (Exception) { } 
} 
Verwandte Themen