之前寫過文章介紹過如何通過roslyn構建自己的c#指令碼,但那篇文章是參考自roslyn ctp版的,記得本來想等到roslyn正式版出來重新更新一下文件的,不過記得後來roslyn是跳票了的,scripting api在正式版本中都一度被移除了,這個更新就沒有做下去了。
最近看到有人在原文中詢問如何使用c# script api,便查詢了一下相關資料,這個功能是在的vs2015 update 1中才正式放出的,其時已經到16年了,使用方法與之前已經大有不同了,便重新寫一篇介紹下如何使用c# script。
微軟在visual studio中已經提供了乙個c#互動視窗,通過它就可以直接執行c# 指令碼語句。
這個視窗是非常強大的,支援語法高亮,智慧型提示,使用起來是非常方便的。簡單的一些靜態函式測試可以直接在該視窗中進行,還是非常方便的。
c#互動視窗方式雖然很方便,但我們很多時候是希望指令碼程式能脫離visualstudio單獨執行,此時我們可以用到的命令列程式csi.exe。
一方面csi程式可以以repl方式執行輸入的命令,另一方面它可以可以執行執行指令碼檔案。
乙個簡單的示例程式如下(注:可以在vs中編寫csx檔案,vs2017就已經有語法高亮和智慧型提示支援了)
//執行指令如下: csi hello.csxhello .csx
using
system;
var msg = "
hello";
console.writeline(msg);
這樣,我們就可以像指令碼語言那樣載入我們的c#程式了
另外,關於c# script語法,基本上和c#差不多,主要多了如下兩個:
例如
#load "我還沒有找到官方的文件(誰知道的話請告知),有一些第三方文件可以參考下:writing a scriptsetup.csx
"#r
"nunit.core.dll
"#r
"nunit.core.inte***ces.dll
"
c# scripting api
更進一步的,我們可以把指令碼程式動態整合到我們的應用程式中,此時就要用到c# scripting api了。要使用c# script api,首先需要.net framework 4.6或.net core 1.0以上環境。
然後安裝nuget程式包:install-package microsoft.codeanalysis.csharp.scripting
首先來個簡單的計算:
object result = await csharpscript.evaluateasync("異常處理也是可以的:1 + 2");
int result = await csharpscript.evaluateasync("
1 + 2
");
try帶上下文狀態執行:catch
(compilationerrorexception e)
var state = await csharpscript.runasync("新增程式集引用:int x = 1;");
state = await state.continuewithasync("
int y = 2;");
state = await state.continuewithasync("
x+y"
);console.writeline(state.returnvalue);
var result = await csharpscript.evaluateasync("新增using匯入system.net.dns.gethostname()",
scriptoptions.default.withreferences(
typeof(system.net.dns).assembly));
var result = await csharpscript.evaluateasync("和宿主程式中的物件互動:sqrt(2)",
scriptoptions.default.withimports(
"system.math
"));
public作為指令碼重複執行:class
globals
var globals = new globals ;
console.writeline(
await csharpscript.evaluateasync("
x+y", globals: globals));
var script = csharpscript.create("指令碼也可以攜帶上下文狀態:x*y", globalstype: typeof
(globals));
script.compile();
for (int i = 0; i < 10; i++)
)).returnvalue);
}
var script = csharpscript.create("當然除了roslyn外,也有一些第三方的指令碼解決方案,使用時也可以參考一下。int x = 1;").
continuewith(
"int y = 2;").
continuewith(
"x + y");
console.writeline((
await script.runasync()).returnvalue);
通過Roslyn構建自己的C 指令碼
注意 本文編寫時參考自roslyn ctp版,roslyn script api在正式版本中i形式是有所改變的,請移步檢視這篇文章 通過roslyn構建自己的c 指令碼 更新版 在下一代的c 中,乙個重要的特性就是 compiler as a service 簡單的講,就是就是將編譯器開放為一種可在...
通過Roslyn構建自己的C 指令碼
在下一代的c 中,乙個重要的特性就是 compiler as a service 簡單的講,就是就是將編譯器開放為一種可在 中呼叫的服務。最近使用了一下微軟放出的project roslyn ctp版,感覺還是非常強大的。要在自己的 中執行c 指令碼,首先進行如下幾步準備工作。在工程中新增rosly...
構建自己的映象
參考鏈結 tensorflow tensorflow僅支援py2.7所以需要構建自己的基於py3.5的tensorflow映象 1查詢ubuntu映象,建立容器 nvidia docker search ubuntu nvidia docker run it d name myimage ubunt...