2011-06-24 45 views
3

我试图编译在Mono 2.8.2本起订量例如,针对.NET 3.5,与MonoDevelop的2.4.1如何停止monodevelop添加** - noconfig **编译选项?

using System; 
using Moq; 

namespace moq_demo 
{ 
    public interface IFoo 
    { 
     bool DoSomething(string n); 
    } 

    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      var mock = new Mock<IFoo>(); 
      mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 
     } 
    } 
} 

我有3编译错误:

/home/rupert/Projects/moq_demo/moq_demo/Main.cs(36,36): Error CS1660: Cannot convert lambda expression' to non-delegate type System.Linq.Expressions.Expression>' (CS1660) (moq_demo)

/home/rupert/Projects/moq_demo/moq_demo/Main.cs(30,30): Error CS1502: The best overloaded method match for `Moq.Mock.Setup(System.Linq.Expressions.Expression>)' has some invalid arguments (CS1502) (moq_demo)

/home/rupert/Projects/moq_demo/moq_demo/Main.cs(30,30): Error CS1503: Argument #1' cannot convert anonymous method' expression to type `System.Linq.Expressions.Expression>' (CS1503) (moq_demo)

我已经完全不知道这些是什么意思。任何人都知道什么可能会导致问题?


编辑

我试图直接与命令

gmcs Main.cs /r:Moq.dll

,并编译编译。所以它必须是由MonoDevelop引入的一些额外的编译选项引起的。通过导出make文件,我确认了我的猜测。这个编译命令

gmcs -noconfig -codepage:utf8 -warn:4 -out:bin/Release/moq_demo.exe -target:exe './Main.cs' './AssemblyInfo.cs' -r:System -r:Moq.dll

会触发编译错误。通过逐一取消这些选项,我发现它是-noconfig导致所有问题。

所以问题没有成为:如何停止monodevelop添加-noconfig编译选项?

+0

这对我来说在单声道2.11(大约一个月前的主干单声道)和单声道2.6.7上生成并运行良好。 你能发布更多源码吗? – IanNorton

+0

我试过了 - http://pastebin.com/rTNW5LSc构建并运行正常。 – IanNorton

+0

嘿,谢谢,我发现导致问题的编译选项。 – ablmf

回答

2

-noconfig选项表示您必须在命令行上提供所有程序集引用。您的编译错误是因为您必须在monodevelop中添加对System.Core的引用以满足您使用的lambda表达式类型。

$ gmcs -noconfig test.cs -r:Moq.dll -r:System.dll -r:System.Core.dll 

适合我。

+0

是的,加入对System.Core的引用解决了这个问题! – ablmf