通過Roslyn動態生成程式集

2021-09-09 03:15:01 字數 1168 閱讀 8716

之前寫過篇文章如何通過roslyn構建自己的c#指令碼,今天本來打算測試一下這部分api在新的版本中的變化,結果發現它的指令碼引擎找不到了,翻了一下官方文件,貌似說暫時性的移除了。便看了一下它動態生成程式集的api,這裡簡單的介紹一下使用方法。

首先需要在nuget中新增codeanalysis的引用(目前還是預覽版,注意在nuget中開啟預覽版的選擇)

動態生成程式集主要有如下幾步

將**解析成語法樹

將語法樹進行編譯

通過emit生成程式集

然後就是如何使用了

動態引導程式集

通過反射呼叫方法

**如下:

staticvoidcompileandrun()

}";vartree = syntaxfactory.parsesyntaxtree(text);

varcompilation = csharpcompilation.create("calc.dll", new ,

options: newcsharpcompilationoptions(outputkind.dynamicallylinkedlibrary),

references: new );

assemblycompiledassembly;

using(varstream = newmemorystream())

varcalculatorclass = compiledassembly.gettype("calculator");

varevaluatemethod = calculatorclass.getmethod("evaluate");

varresult = evaluatemethod.invoke(null, null).tostring();

console.writeline(result);

}另外,若只是實現本例所示的功能的話,.net 1.0中就存在的codedom就能實現,上面的步驟和codedom的也是非常類似的。codedom實際上是roslyn的前身,roslyn能提供更多高階的功能,關於它們之間的區別和聯絡,stackwverflow上的一篇帖子microsoft roslyn vs. codedom裡介紹得比較詳細,這裡我就不多介紹了。

c 動態生成程式集dll

動態生成程式集,指定版本號,如果需要引用程式集,可以新增乙個類的 可以是個空類,也可以將一些檔案嵌入到dll裡。csharpcodeprovider codeprovider new csharpcodeprovider system.codedom.compiler.compilerparamet...

認識程式集 1 程式集的生成

程式集 assembly 是.net程式的最小組成單位。每個程式集都有自己的名稱 版本等資訊。程式集通常表現為乙個檔案 exe或.dll檔案 這樣的程式集被稱為單檔案程式集,這種程式集是最常見的。程式集也可以由多個檔案組成,每個檔案都是乙個模組檔案或者是乙個資源檔案,這樣的程式集被稱為多檔案程式集。...

通過Emit實現動態類生成

麻煩歸麻煩,非不能也,動態生成乙個簡單的類還不至於太難。假設有如下介面 inte ce ianimal 希望能建立乙個類生成器typecreator,並能以以下方式使用 typecreator tc new typecreator typeof ianimal type t tc.build ian...