7

Estoy tratando de agregar el soporte de Silverlight a mi programa favorito de programación Nemerle.Obtener tipos en mscorlib 2.0.5.0 (también conocido como Silverlight mscorlib) a través de la reflexión?

Nemerle, sobre el procedimiento de compilación, carga todos los tipos a través de la reflexión principalmente en 2 pasos

1-) utiliza Assembly.LoadFrom para cargar montaje 2-) Assembly.GetTypes Usese() para obtener los tipos

Luego, al final de la compilación, emite los tipos resueltos con Reflection.Emit.

Este procedimiento funciona para todos los ensamblajes, incluidos los de Silverlight, excepto mscorlib de Silverlight.

en C# esto falla:

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

pero esto pasa:

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

Bu en este último, a.GetTypes() emite una excepción no existe matriz de System.Object diciendo.

¿Hay alguna salida?

+0

haces esto de Silverlight en sí o el CLR estándar? –

Respuesta

5

Suponiendo que está tratando de reflexionar sobre la mscorlib de Silverlight desde la CLR estándar, esto no funcionará porque la CLR no permite cargar varias versiones de mscorlib. (Quizás esto se deba a que podría alterar la resolución de sus tipos principales).

Una solución consiste en utilizar Mono.Cecil para inspeccionar los tipos: http://mono-project.com/Cecil. Esta biblioteca en realidad funciona mejor que Reflection de .NET y se supone que es más poderosa.

Aquí hay algo de código para empezar:

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

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

Puede compilar Nemerle con el conjunto de Silverlight y después de haber Nemerle trabajando en la parte superior de Silverlight :)

Cuestiones relacionadas