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?

Foi útil?

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:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top