Conseguir tipos de mscorlib 2.0.5.0 (también conocido como Silverlight mscorlib) a través de la reflexión sobre?
-
09-09-2019 - |
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?
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:)