之前寫過篇文章如何通過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...