Pregunta

Estoy tratando de agregar el soporte de Silverlight a mi Nemerle langauge programación favorita.

Nemerle, el procedimiento de compilación, carga todo tipo a través de la reflexión sobre todo en 2 pasos

1-) Usos Assembly.LoadFrom para cargar conjunto 2-) Assembly.GetTypes Usese () para obtener los tipos

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

Este procedimiento funciona para todos los ensamblados 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 el segundo, a.GetTypes () lanza una excepción no existe matriz de System.Object diciendo.

¿Hay una salida?

¿Fue útil?

Solución

Si se asume que está tratando de reflexionar sobre mscorlib de Silverlight desde el CLR estándar, esto no funcionará porque el CLR no permite cargar múltiples versiones de mscorlib. (Tal vez esto se debe a que podría alterar la resolución de sus tipos básicos).

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

Aquí hay un código para que pueda 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;

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top