Я пишу специальный мини-компилятор и часто просматриваю разобранный CIL, чтобы понять, как это сделать.Но часто не очевидно, как перевести разобранный код в вызовы Reflection.Emit.Существует ли справочное руководство или какой-либо другой источник информации для выполнения этого перевода?
Редактировать : да, отображение кодов операций в ILGenerator довольно просто;Я говорю обо всех других вещах, таких как .directives и атрибуты.Например, как вы узнаете, как написать эквивалент Reflection.Emit, например, Dictionary<TKey,TValue>
?
.class public auto ansi serializable beforefieldinit Dictionary<TKey, TValue>
extends System.Object
implements System.Collections.Generic.IDictionary`2<!TKey, !TValue>,
System.Collections.Generic.ICollection`1<valuetype
System.Collections.Generic.KeyValuePair`2<!TKey, !TValue>>,
...
{
.custom instance void System.Diagnostics.DebuggerDisplayAttribute::
.ctor(string) = { string('Count = {Count}') }
.method public hidebysig newslot virtual final instance bool TryGetValue
(!TKey key, [out] !TValue& 'value') cil managed
{
.maxstack 3
.locals init ([0] int32 num)
...
Или как насчет директивы param?
// public static void SayHello(string s = "Hello World!")
.method public hidebysig static void SayHello([opt] string s) cil managed
{
.param [1] = "Hello World!"