【问题标题】:Compile code using Tuple using Mono's mcs使用 Mono 的 mcs 使用 Tuple 编译代码
【发布时间】:2012-11-18 02:00:14
【问题描述】:

我有一些使用 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,尤其是 supports System.Tuple,所以这不应该是问题。

如何编译使用Tuples 的代码?

【问题讨论】:

  • @mikez: dmcs 给出的错误与第一个 mcs 错误完全相同。
  • @JimMischel:这个问题是关于旧的gmcs/dmcs 编译器的。
  • @Mechanicalsnail 还将 using System; 添加到 Test.cs
  • @mikez:很有趣。添加using System; 可以使用dmcs 修复它,但不能使用mcsmcs -sdk:4

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


【解决方案1】:

我会期望它在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 时是否确实遇到了同样的问题。如果您看到它不是一个干净的编译但没有注意到它是不同的消息,我不会感到惊讶。

【讨论】:

  • 如果包含import System;dmcs 确实工作,但mcs -sdk:4 Test.cs 仍然抛出异常。这是Linux版本中的错误吗? (我已经检查过它在这两种情况下都是一个干净的编译(没有*.exe 文件)。)
  • @Mechanicalsnail:在执行时抛出异常 - 你仍然在谈论 compile-time 错误,对吧?这可能是您正在使用的版本中的一个错误......我个人只会使用dmcs。从 Mono 2.11 开始,您只需要 mcs。 (见mono-project.com/CSharp_Compiler
  • @JonSkeet 它看起来像单声道编译器mcs 正在抛出。它试图在错误的System.Core 版本中加载System.Dynamic.BinaryOperationBinder
  • @mikez:啊,我没有看到显示异常的编辑。这更有意义。看起来像是那个特定版本的 Mono 中的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多