2016-05-13 1 views
0

je le code suivant, qui Loades tous aseemblies qui sont refrenced par mon porject et référencent toutes utilisées par lesReflectionTypeLoadException Impossible de charger un ou> plusieurs des types demandés

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 ...} 

Sur ma boîte de dev ce d'entreprise comme prévu, sur un autre environnement ce qui provoque une exception

System.Reflection.ReflectionTypeLoadException: Impossible de charger un ou plusieurs des types demandés. Récupérez la propriété LoaderExceptions pour plus d'informations.

Pourquoi cette exception est-elle levée? est-il possible de refactoriser mon code pour que l'exception soit ignorée?

+0

Aller à rechercher que 'propriété LoaderExceptions' ou alors ....? – asawyer

+0

En utilisant quelque chose comme ceci pour le vider 'catch (ReflectionTypeLoadException e) {throw new Exception (string.Format (" Impossible de charger le type en raison de ce qui suit: {0} {1} {0} ", Environment.NewLine, string. Rejoindre (Environment.NewLine, e.LoaderExceptions.Select (le => le.ToString()). ToArray()))); } ' – asawyer

+0

Malheureusement, je n'ai pas accès à l'environnement où cela s'est produit pour les deux prochains jours. Donc Essayer de le résoudre aveugle –

Répondre

1

J'ai eu exactement le même problème mais l'Assemblée avait des problèmes avec je ne m'inquiétais pas vraiment.

Je suis passé de ce (a travaillé sur place):

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

à ceci:

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) { } 
}