截至this文章 我想写一个小的 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();
而example.txt的文件内容为:
System.IO.StreamReader sr = new System.IO.StreamReader("foo.txt");
string s = sr.ReadToEnd();
int sum = System.Convert.ToInt32(s);
现在我想限制用户只能使用 C# 的基本函数(使用 int、string、while、for)和一些自定义函数,而不是整个 .NET 库。但即使我不包含 System.IO als 引用,用户也可以键入 System.IO.something 并获得正确的结果。
是否有可能从脚本中删除对“系统”的访问?
我很高兴得到任何答案。
最佳答案
您需要正确设置 ScriptingOptions
,这意味着需要使用自定义 MetadataReferenceResolver
而不是默认的,它会自动解析丢失的引用.我不知道是否已经有一个仅根据其参数解析程序集的解析器,但您当然可以实现您的。查看TestMetadataReferenceResolver
,它做类似的事情。
更新 这不适用于 mscorlib 中定义的内容。
关于c# - Roslyn 脚本 - 没有 "System"的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744177/