我对Mono比较陌生,我正在尝试为我的应用程序添加C#脚本功能。我是Miguel de Icaza发现的blog post。将C#编译器作为服务调用的方法是包含Mono.CSharp并使用Evaluator类,特别是Evaluate或Run方法。记录在案here。
所以这是我的示例代码(源自互联网上有关此主题的其他博客文章,是的,我已经完成了我的谷歌搜索)
using System;
using Mono.CSharp;
namespace EvalTest
{
public class Test
{
static void Main(string [] args)
{
Mono.CSharp.Evaluator.Evaluate("using System;");
Mono.CSharp.Evaluator.Run("using System;");
}
}
}
当我们尝试编译它时,我得到了这些错误:
eval.cs(10,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference?
eval.cs(11,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference?
在使用所有Mono编译器的Linux和OSX上也发生了同样的事情,我甚至试过了Silverlight。我搜索了stackoverflow的类似问题,每个人都参考了Miguel的博客文章和一些类似的示例代码。我错过了什么?我需要添加一些编译器标志吗?谢谢你的帮助。
答案 0 :(得分:6)
你有没有关注博客文章的这一点:
用法很简单,你必须引用`gmcs.exe'程序集
?这就是我对你的代码所做的(在Test.cs中):
c:\Users\Jon\Test>copy "c:\Program Files (x86)\Mono-2.8"\lib\mono\2.0\gmcs.exe .
1 file(s) copied.
c:\Users\Jon\Test>gmcs /r:gmcs.exe Test.cs
c:\Users\Jon\Test>mono Test.exe
Unhandled Exception: System.ArgumentException:
The expression did not set a result
at Mono.CSharp.Evaluator.Evaluate (System.String input) [...]
at EvalTest.Test.Main (System.String[] args) [...]
这是公平的,它不会给出任何结果 - 它只是一个使用指令。这样可以正常工作:
Mono.CSharp.Evaluator.Run("System.Console.WriteLine(5 + 5);");
答案 1 :(得分:2)
您是否缺少装配参考?
这是那些通常在95%的情况下都是正确的心理错误信息之一。回到博客文章并注意这一行:
用法很简单,你必须引用`gmcs.exe'程序集