我有一些使用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
的代码?
答案 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
时仔细检查您是否确实遇到了相同的问题。如果您发现它不是一个干净的编译但是没有注意到它是一个不同的消息,我不会感到惊讶。