2015-10-21 30 views
11

IKVM.Reflection.Emit ha "la capacità di leggere ed emettere gli assembly .NET 1.1, .NET 2.0 e .NET 4.0 (durante l'esecuzione, ad esempio, .NET 2.0). ".Differenza tra IKVM.Reflection.Emit e Mono.Cecil

Mono.Cecil ha lo stesso? Sono intercambiabili per questo caso d'uso? Entrambi sono supportati al giorno d'oggi? Quali sono le principali differenze tra loro (nell'emissione di IL)?

risposta

1

So che questa è stata una domanda vecchia, ma mi piacerebbe fornire una risposta. IKVM.Reflection.Emit API è stata inventata quando il suo autore era stanco di System.Reflection.Emit e Cecil.Reflection.Emit. Per rendere il compilatore IKVMC più veloce, ha lavorato da zero per progettare questa nuova API.

La storia può essere trovato da seguenti post del blog,

2008 Aug Switch from Microsoft .NET reflection to Cecil

2008 Nov Switch from Cecil to IKVM.Reflection.Emit

2010 Jan Announce IKVM.Reflection

Quindi in generale IKVM.Reflection e Cecil hanno funzionalità simili, e IKVM.Reflection L'API dovrebbe essere più veloce in molti modi.

Fino ad ora è ancora possibile vedere Cecil è ampiamente utilizzato in molte utilità (come Obfuscar, uno strumento di offuscamento che sto mantenendo). IKVM.Reflection è utilizzato principalmente nel compilatore Mono C# e IKVM stesso, e non sono sicuro se ci siano altri progetti che lo utilizzano (ma dovrebbero essere molti).