Frage

Ich versuche, Silverlight Unterstützung meines Lieblings Programmierung Langauge Nemerle hinzuzufügen.

Nemerle, auf Übersetzungsvorgang lädt alle Arten über Reflexion hauptsächlich in 2 Schritten

1-) Verwendet Assembly.LoadFrom Assembly zu laden 2-) Usese Assembly.GetTypes (), um die Arten zu erhalten

Dann am Ende der Kompilation emittiert die aufgelösten Typen mit Reflection.Emit.

Dieses Verfahren funktioniert für alle Baugruppen einschließlich Silverlight diejenigen außer mscorlib von Silverlight.

In c # dies fehlschlägt:

 var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");

, aber das geht:

var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

Bu in den letzteren, a.GetTypes () löst eine Ausnahme sayin System.Object der Eltern nicht existiert.

Gibt es einen Ausweg?

War es hilfreich?

Lösung

Unter der Annahme, Silverlight mscorlib von dem Standard-CLR zu reflektieren über Sie versuchen, das wird nicht funktionieren, weil die CLR nicht zulässt Laden mehr Versionen von mscorlib. (Vielleicht ist dies, weil es Auflösung seiner Kerntypen aufregen könnte).

Eine Abhilfe ist Mono.Cecil zu verwenden, um die Arten zu überprüfen: http://mono-project.com/Cecil . Diese Bibliothek führt tatsächlich besser als .NET die Reflexion und soll leistungsfähiger sein.

Hier ist ein Code für den Anfang:

AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");

var types =
    from ModuleDefinition m in asm.Modules
    from TypeDefinition t in m.Types
    select t.Name;

Andere Tipps

Sie können Nemerle mit Silverlight Montage kompilieren und dann haben Sie Nemerle Arbeiten auf der Oberseite Silverlight:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top