c# - Roslyn 脚本 - 没有 "System"的脚本

标签 c# scripting visual-studio-2015 roslyn

截至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/

相关文章:

c# - 测试 Powershell 脚本的正确性

msbuild - 使用 Visual Studio 2015 编译 ToolsVersion 12

C++ 字符数组参数在 x86 编译时包含奇怪的字符

c# - Entity Framework 中的类和接口(interface)层次结构?

c# - 反射和 WCF

c# - 如何使用 C# 从 XmlTextWriter 中删除 BOM?

javascript - Visual Studio cordova s​​ql server 教程

java - Parse.com 许可与反编译代码,用于使用 Xamarin 将 Java 库绑定(bind)到 C#

c++ - 使用 Python 而不是 XML 在 C++ 中加载资源?

linux - 将脚本加载到/bin,然后删除,但仍然有效