3

我有一些使用Tuples 的 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,特别是支持System.Tuple.NET ,所以这不应该是问题。

如何编译使用Tuples 的代码?

4

1 回答 1

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。您mcs只需指定 v4 框架即可使用它:

mcs -sdk:4 Test.cs

尝试一下,并仔细检查您在使用dmcs. 如果您看到它不是一个干净的编译但没有注意到它是不同的消息,我不会感到惊讶。

于 2012-11-18T07:58:45.527 回答