3

I have some C# code using Tuples:

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

I tried compiling using

mcs -debug+ -o Test.exe Test.cs

but it gives the error

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

I thought it might be trying to compile against an old version of mscorlib which lacks tuples. Looking at the man page, it seems you specify the version using -sdk:4, but that doesn't work either:

$ 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'                                                                                                                                                                         

(followed by a stack trace).

I am running:

$ mcs --version
Mono C# compiler version 2.10.8.1

on Ubuntu Precise. According to the documentation, Mono has supported .NET 4.0 since version 2.8, and in particular supports System.Tuple, so that shouldn't be the issue.

How do you compile code that uses Tuples?

4

1 に答える 1

3

私はそれが失敗することを期待mcsしますが、で動作しdmcsます。WindowsにMono2.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を使用することです。mcsv4フレームワークを指定するだけで動作させることができます。

mcs -sdk:4 Test.cs

それを試してみてください。また、を使用したときに本当に同じ問題が発生したことを再確認してくださいdmcs。クリーンなコンパイルではないことを確認したが、別のメッセージであることに気づかなかったとしても、私は驚かないでしょう。

于 2012-11-18T07:58:45.527 に答える