Roslyn 脚本 - 没有“系统”的脚本

pBu*_*uch 5 c# scripting roslyn visual-studio-2015

从本文开始我想编写一个小的 C# 脚本引擎来工作。我试过这段代码:

System.IO.StreamReader sr = new System.IO.StreamReader("example.txt");
var prog = sr.ReadToEnd();
sr.Close();
ScriptOptions so = ScriptOptions.Default;
Console.WriteLine(CSharpScript.RunAsync(prog, so).Result.GetVariable("sum").Value);
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

example.txt的文件内容为:

System.IO.StreamReader sr = new System.IO.StreamReader("foo.txt");
string s = sr.ReadToEnd();
int sum = System.Convert.ToInt32(s);
Run Code Online (Sandbox Code Playgroud)

现在我想限制用户仅使用 C# 的基本函数(使用 int、string、while、for)和一些自定义函数,而不是整个 .NET 库。但即使我不包含 System.IO 参考,用户也可以键入 System.IO.something 并得到正确的结果。

是否可以从脚本中删除对“系统”的访问权限

我很高兴得到任何答案。

Tam*_*mas 1

您需要正确设置,这意味着需要使用自ScriptingOptions定义项而不是默认项,这会自动解决丢失的引用。MetadataReferenceResolver我不知道是否已经有一个解析器仅根据其参数解析程序集,但您当然可以实现您的解析器。查看TestMetadataReferenceResolver,它做了类似的事情。

更新 这不适用于 mscorlib 中定义的内容。