3

我正在试验 Roslyn 脚本引擎。使用以下代码,我设置了我的脚本引擎。

var csharpEngine = new ScriptEngine();

csharpEngine.AddReference("System");

csharpEngine.AddReference(this.GetType().Assembly.Location);            

scriptSession = csharpEngine.CreateSession();

然后我使用以下行执行脚本:

scriptSession.Execute(script);

该脚本包含对我程序集中类的静态函数的非常简单的引用。

private string script = 
@"using System;
using RoslynWindow;

Hello.SayHello();";

在输出窗口中,该函数仅打印到控制台。所以我展示了我可以调用我的程序集的公共静态成员,而无需将“HostObjectModel”传递给脚本引擎。我想防止这种情况发生。我希望能够仅注册脚本引擎可以访问的特定成员(函数、变量或属性),而不能注册其他成员。

知道如何做到这一点吗?

4

1 回答 1

1

使用 Roslyn 遍历 AST 以检查脚本是否尝试调用您不允许的任何内容。

于 2012-09-27T15:46:23.393 回答