Domanda

Sto cercando di aggiungere il supporto per Silverlight mio preferito Nemerle programmazione langauge.

Nemerle, sulla procedura di compilazione, carica tutti i tipi tramite riflesso principalmente in 2 fasi

1-) Utilizza Assembly.LoadFrom per caricare assembly 2-) Assembly.GetTypes Usese () per ottenere i tipi

Poi, alla fine della compilazione emette i tipi risolti con Reflection.Emit.

Questa procedura funziona per tutti i gruppi, tra cui quelli di Silverlight, ad eccezione mscorlib di Silverlight.

In C # questo fallisce:

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

, ma questo passa:

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

Bu in questi ultimi, a.GetTypes () genera un'eccezione madre di sayin System.Object non esiste.

C'è una via d'uscita?

È stato utile?

Soluzione

Supponendo che si sta cercando di riflettere su mscorlib di Silverlight dal CLR normale, questo non funzionerà perché il CLR non consente di carico più versioni di mscorlib. (Forse questo è perché potrebbe sconvolgere la risoluzione dei suoi tipi di nucleo).

Una soluzione è quella di utilizzare Mono.Cecil di ispezionare i tipi: http://mono-project.com/Cecil . Questa libreria in realtà si comporta meglio di riflessione del NET e si suppone che sia più potente.

Ecco un po 'di codice per iniziare:

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

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

Altri suggerimenti

È possibile compilare Nemerle con assemblaggio Silverlight e poi avete Nemerle lavorando sulla parte superiore del Silverlight:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top