使用Mono的mcs使用Tuple编译代码

时间:2012-11-18 02:00:14

标签: c# .net c#-4.0 mono compiler-errors

我有一些使用Tuple的C#代码:

public class Test {
    static void Main() {
        Tuple<int, int> t = Tuple.Create(0, 1);
    }
}

我尝试使用

进行编译
mcs -debug+ -o Test.exe Test.cs

但是它给出了错误

Test.cs(3,9): error CS0246: The type or namespace name `Tuple' could not be found. Are you missing a using directive or an assembly reference?
Compilation failed: 1 error(s), 0 warnings

我认为它可能会尝试针对缺少元组的旧版mscorlib进行编译。查看手册页,您似乎使用-sdk:4指定版本,但这也不起作用:

$ mcs -sdk:4 Test.cs

Unhandled Exception: System.TypeLoadException: Type 'System.Dynamic.BinaryOperationBinder' not found in assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'                                                                                                                                                                         

(后面是堆栈跟踪)。

我正在跑步:

$ mcs --version
Mono C# compiler version 2.10.8.1

在Ubuntu Precise上。根据文档,Mono从版本2.8开始支持.NET 4.0,特别是supports System.Tuple,因此不应该是问题。

如何编译使用Tuple的代码?

1 个答案:

答案 0 :(得分:3)

我希望期望它与mcs失败,但与dmcs合作。我刚刚在Windows上安装了Mono 2.10.9,干净,这是我的代码(包括顶部的using System;)的结果:

c:\Users\Jon\Test>mcs Test.cs
    Test.cs(4,9): error CS0246: The type or namespace name `Tuple' could not be
    found. Are you missing a using directive or an assembly reference?
    Compilation failed: 1 error(s), 0 warnings

c:\Users\Jon\Test>dmcs Test.cs
    Test.cs(4,25): warning CS0219: The variable `t' is assigned but its value is
    never used
    Compilation succeeded - 1 warning(s)

不同之处在于dmcs默认使用框架v4,而mcs使用v2。只需指定v4框架,就可以使用mcs

mcs -sdk:4 Test.cs

试一试,并在使用dmcs时仔细检查您是否确实遇到了相同的问题。如果您发现它不是一个干净的编译但是没有注意到它是一个不同的消息,我不会感到惊讶。