2015-12-22 103 views
3

我正在嘗試將C#腳本集成到我的應用程序中。我正在使用全局變量對象來爲我的腳本提供各種數據。在CSharpScript中訪問腳本類中的全局變量

public class Globals 
{ 
    public int X; 
    public int Y; 
} 

但是似乎全局僅在腳本的「全局」級別訪問。這工作:

Console.WriteLine(CSharpScript.EvaluateAsync<int>(
    @"class Foo 
    { 
     public int Bar() 
     { 
      return X + Y; 
     } 
    } 

    var foo = new Foo(); 
    foo.Bar()", globals: new Globals { X = 1, Y = 2 }).Result); 

Microsoft.CodeAnalysis.Scripting.CompilationErrorException::(5

Console.WriteLine(CSharpScript.EvaluateAsync<int>(
    "X + Y", 
    globals: new Globals { X = 1, Y = 2 }).Result); 

當我嘗試腳本類中訪問全局我總是異常結束,24):錯誤CS0120:一個對象引用是所必需的非靜態字段,方法或屬性「Globals.Y」

預計全局變量只能在腳本的「全局」級別上工作嗎?從異常消息看來,引擎正確識別屬於Globals對象的Y屬性。

我使用Microsoft.CodeAnalysis.CSharp.Scripting V1.1.1

回答

0

你必須使用RunAsync,不EvaluateAsync,並評估ScriptState變量數組。

Task<ScriptState<object>> scrstate=CSharpScript.RunAsync(yourscript); 
var ret_global = scrstate.Result.Variables[0].Value; 

全局將是0,1,2 ......

RunAsync samples

+1

腳本結束後訪問全局變量時沒有問題。我在腳本本身中訪問全局變量時遇到問題。由於上述異常,腳本既不能通過RunAsync也不能運行,也不能運行EvaluateAsync。 – manison