7

J'essaye d'ajouter le support de Silverlight à mon langauge préféré de programmation Nemerle.Obtention des types dans mscorlib 2.0.5.0 (alias Silverlight mscorlib) par réflexion?

Nemerle, sur la procédure de compilation, charge tous les types par réflexion principalement en 2 étapes

1) Utilise Assembly.LoadFrom à l'assemblage charge 2) pour obtenir les types Usese Assembly.GetTypes()

Ensuite, à la fin de la compilation, il émet les types résolus avec Reflection.Emit.

Cette procédure fonctionne pour tous les assemblages, y compris Silverlight sauf mscorlib de Silverlight.

En C# échec:

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

mais passe:

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

Bu dans ce dernier, a.GetTypes() renvoie une exception parent de sayin System.Object n'existe pas.

Y a-t-il un moyen de s'en sortir?

+0

Ce que tu fais de Silverlight lui-même ou la CLR standard? –

Répondre

5

En supposant que vous essayez de refléter le mscorlib de Silverlight à partir du CLR standard, cela ne fonctionnera pas car le CLR ne permet pas le chargement de plusieurs versions de mscorlib. (Peut-être parce que cela pourrait perturber la résolution de ses types de base). Une solution de contournement consiste à utiliser Mono.Cecil pour inspecter les types: http://mono-project.com/Cecil. Cette bibliothèque fonctionne réellement mieux que la réflexion de .NET et est supposée être plus puissante.

est ici un code pour vous aider à démarrer:

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

Vous pouvez compiler Nemerle avec l'assemblage Silverlight et vous avez Nemerle travailler sur le dessus de Silverlight :)