2012-06-04 43 views
2

如何解析用於生成IL操作碼的C#源代碼,可以在DynamicMethod中使用?從C#源代碼發出IL OpCodes

我想動態地執行代碼而不產生不必要的程序集。 類似這樣的:

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

另外,根據* how *嚴格你需要,你可能能夠逃脫CSharpCodeProvider GenerateInMemory = false –

+0

@Gabe C#4.我可以使用單聲道。我發現很好的項目NRefactory但是我仍然需要通過我自己的實現發射邏輯。我以前沒有和Mono一起工作過。我錯過了什麼? – lorond

回答

1

Roslyn生成代碼一個IL指令應該是接近這個。 ..

+0

羅斯林尚未發佈,所以我不能在生產中使用它。 – lorond

+0

@Lorond:但它基於CCI,你可以肯定使用! – leppie

1

有沒有辦法來實現它。

你有幾個方式來實現:

  1. 您可以使用C#編譯器,但它會編譯外部CS文件到單獨的assemby。
  2. 可以使用的CodeDOM構建和編譯代碼樹
  3. 您可以構建的表達式樹和編譯
  4. 可以陸續