我想从我的常规.NET 3.5应用程序中使用Mono的编译器作为服务.
我已经下载了最新的位(2.6.7),在Visual Studio中创建了一个简单的控制台应用程序并引用了Mono.CSharp dll.
然后,在我的控制台应用程序中(直接在线样本):
Evaluator.Run("using System; using System.Linq;");
bool ress;
object res;
Evaluator.Evaluate(
"from x in System.IO.Directory.GetFiles (\"C:\\\") select x;",
out res, out ress);
foreach (var v in (IEnumerable)res)
{
Console.Write(v);
Console.Write(' ');
}
Run Code Online (Sandbox Code Playgroud)
这会在Evaluator.Run(第一行)引发异常:
Illegal enum value: 2049.
Parameter name: access
Run Code Online (Sandbox Code Playgroud)
这是因为dll是使用Mono.exe编译的,而不是csc.exe,我相信.
我已经尝试直接从demo-repl.zip文件中的http://tirania.org/blog/archive/2010/Apr-27.html下载Mono.CSharp dll ......这不会引发异常. ..但是在调用Evaluator.Evaluate之后out参数(res)是null ...所以我不确定出了什么问题.没有例外被抛出......
所以,我想弄清楚为什么我从demo-repl.zip下载的dll返回null.
编辑:我弄清楚它为什么返回null.看起来由于某种原因,编译器没有拿起System.Linq命名空间......虽然我不知道为什么......如果我只是评估"System.IO.Directory.GetFiles(\"C:\\ ")",它工作正常.
更新:看起来Mono编译器拾取引用的系统程序集似乎有问题.如果我直接复制其csharp控制台工具的示例:
csharp> var list = new int [] {1,2,3};
csharp> var b = from x in list
> where x > 1
> select x; …Run Code Online (Sandbox Code Playgroud)