Разница между IKVM.Reflection.Emit и Mono.Cecil

IKVM.Reflection.Emit имеет "способность читать и выпускать сборки .NET 1.1,.NET 2.0 и .NET 4.0 (во время работы, например,.NET 2.0)".

Есть ли у Mono.Cecil то же самое? Являются ли они взаимозаменяемыми для этого варианта использования? Оба они поддерживаются в настоящее время? Каковы основные различия между ними (при испускании ИЛ)?

Ответ 1

Я знаю, что это был старый вопрос, но я хотел бы дать ответ. IKVM.Reflection.Emit API был изобретен, когда его автор устал от System.Reflection.Emit и Cecil.Reflection.Emit. Чтобы сделать компилятор IKVMC быстрее, он работал с нуля, чтобы разработать этот новый API.

Историю можно найти в следующих блогах,

2008 Aug Переключитесь с Microsoft.NET на Сесил

2008 Nov Переключиться с Cecil на IKVM.Reflection.Emit

2010 Jan Объявить IKVM.Reflection

Итак, как правило, IKVM.Reflection и Cecil имеют схожие функции, а IKVM.Reflection API должен быть быстрее во многих отношениях.

До сих пор вы все еще можете видеть, что Cecil широко используется во многих утилитах (таких как Obfuscar, инструмент обфускации, который я поддерживаю). IKVM.Reflection в основном используется в компиляторе Mono С# и сам IKVM, и я не уверен, есть ли в нем другие проекты (но их должно быть много).