2012-06-04 1 views
2

Как разобрать исходный код C# для генерации кодов операций IL, которые могут использоваться в DynamicMethod?Исправить IL OpCodes из исходного кода C#

Я хочу выполнить код динамически, не создавая ненужных сборок. Что-то вроде этого:

var body = "return \"sample\";"; 
var dm = new DynamicMethod("method_" + Guid.NewGuid().ToString("N"), typeof(string), null); 
var parser = new SomeKindOfCSharpParser(); 
parser.Emit(body, m.GetILGenerator()); 
+0

Вы используете C# 5? Если это так, вы все настроены. Если нет, можете ли вы использовать Mono? – Gabe

+3

Кроме того, в зависимости от того, насколько строго вам нужно, вы можете уйти с CSharpCodeProvider с GenerateInMemory = false –

+0

@Gabe C# 4. Могу использовать Mono. Я нашел хороший проект NRefactory, но мне все еще нужно реализовать Emit логику самостоятельно. Раньше я не работал с Моно. Я что-то упустил? – lorond

ответ

1

Roslyn должно быть что-то близко к этому. ..

+0

Roslyn еще не выпущен, поэтому я не могу использовать его в производстве. – lorond

+0

@Lorond: Но он основан на CCI, который вы, безусловно, можете использовать! – leppie

1

Там нет никакого способа его реализации.

У вас есть несколько способов его реализации:

  1. Вы можете использовать C# компилятор, но он будет компилировать внешний файл CS в отдельную assemby.
  2. Вы можете использовать CodeDOM для создания и компиляции дерево кода
  3. Вы можете построить дерево выражения и компилировать его
  4. Вы можете сгенерировать код одной команды IL после очередного

 Смежные вопросы

  • Нет связанных вопросов^_^