Question

Je suis en train d'ajouter le support Silverlight à mon langauge de programmation favori Nemerle.

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

1) utilise pour charger Assembly.LoadFrom ensemble 2-) Usese Assembly.GetTypes () pour obtenir les types

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

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

Dans c # ceci échoue:

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

mais cela passe:

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

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

Y at-il un moyen de sortir?

Était-ce utile?

La solution

En supposant que vous essayez de réfléchir sur la mscorlib de Silverlight de la CLR standard, cela ne fonctionnera pas parce que le CLR ne permet pas le chargement de plusieurs versions de mscorlib. (Peut-être parce qu'elle pourrait bouleverser la résolution de ses types de base).

Une solution consiste à utiliser Mono.Cecil pour inspecter les types: http://mono-project.com/Cecil . Cette bibliothèque exécute en fait mieux que la réflexion de .NET et est censé être plus puissant.

Voici un code pour vous lancer:

AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");

var types =
    from ModuleDefinition m in asm.Modules
    from TypeDefinition t in m.Types
    select t.Name;

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top