Wie man benutzerdefinierte Attribute aus einer assembly, die nicht (richtig) geladen

Wir alle wissen, dass die Baugruppe abgefragt werden können für Attribute mit der GetCustomAttributes-Methode. Ich möchte an dieser zu identifizieren, die eine Erweiterung Modul für meine Anwendung. Um jedoch zu vermeiden, laden jeden der Montage ziehe ich einen defensiven Ansatz:

  1. mit Montage.ReflectionOnlyLoadFrom um mehr Informationen über eine assembly (hat es meine ModuleAttribute?)

  2. wenn die ModuleAttribute gefunden wird, werde ich endlich laden Sie Sie, indem Sie Baugruppen.LoadFrom

Leider scheint es, dass es keine Möglichkeit gibt, um die Attribute einer assembly, die geladen wird in der Reflexion-nur Rahmen:

myAssembly.GetCustomAttributes(typeof(ModuleAttribute), false)

schlägt mit einer InvalidOperationException ("Es ist illegal zu reflektieren, die auf der benutzerdefinierten Attribute eines Typs geladen über ReflectionOnlyGetType") und

CustomAttributeData.GetCustomAttributes(myAssembly)

schlägt mit ReflectionTypeLoadException, weil der abhängigen Assemblys geladen wird.

So, wie man die Attribute ohne

  1. verschmutzen meine Anwendungsdomäne mit nutzlos (vielleicht schädlichen) Arten von aufrufenden Assembly.LoadFrom
  2. den laden müssen alle referenzierten Assemblys
  3. die Notwendigkeit für separate Anwendungsdomänen (gab es einen kurzen Versuch, Roch nach noch mehr PITA)

?

InformationsquelleAutor Marc Wittke | 2009-09-22
Schreibe einen Kommentar