Obtendo tipos em mscorlib (mscorlib aka Silverlight) 2.0.5.0 via reflexão sobre?
-
09-09-2019 - |
Pergunta
Eu estou tentando adicionar suporte Silverlight à minha langauge programação favorita Nemerle.
Nemerle, no procedimento de compilação, cargas de todos os tipos através de reflexão principalmente em 2 etapas
1-) Usa Assembly.LoadFrom para carregar assembly 2-) Assembly.GetTypes Usese () para obter os tipos
Então, no final de compilação emite os tipos resolvidos com Reflection.Emit.
Este procedimento funciona para todos os conjuntos inclusive Silverlight exceto mscorlib do Silverlight.
Em c # isto falhar:
var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");
mas isso passa:
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll");
Bu no segundo, a.GetTypes () inicia uma excepção dizendo-mãe da System.Object não existe.
Existe uma saída?
Solução
Assumindo que você está tentando refletir sobre mscorlib do Silverlight do CLR padrão, isto não vai funcionar porque o CLR não permite carregar várias versões do mscorlib. (Talvez isso é porque ele poderia perturbar resolução de seus tipos básicos).
A solução é usar Mono.Cecil para inspecionar os tipos: http://mono-project.com/Cecil . Esta biblioteca realmente executa melhor do que Reflexão do .NET e é suposto ser mais poderoso.
Aqui está um código para você começar:
AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");
var types =
from ModuleDefinition m in asm.Modules
from TypeDefinition t in m.Types
select t.Name;
Outras dicas
Você pode compilar Nemerle com Silverlight montagem e, em seguida, você Nemerle trabalhando em cima do Silverlight:)