如何使用Mono编译面向C# / .NET 4的代码?

4
我在Linux上安装了Mono 2.10.4,并一直试图编译一个依赖于.NET C# 4的代码库。我已经能够在MonoDevelop中进行编译,但需要能够通过命令行/构建工具完成。
执行:
gmcs -langversion:4 -target:library -out:foo.dll ... <sources>

会产生以下错误:

error CS1617: Invalid -langversion option `4'. It must be `ISO-1', `ISO-2', `3' 
or `Default'

编译器版本是 gmcs --version:

Mono C# 编译器版本 2.10.4.0

进一步说明:

  1. ubuntu 11.04
  2. 安装在 /opt/mono-2.10
  3. 先在路径中安装 mono

顺便提一下,如果你在Monodevelop的构建输出面板中查看,你会看到提示:调用的是dmcs而不是gmcs。 - sehe
1个回答

7
我认为你想要运行dmcs而不是gmcs。从CSharp Compiler page可以看到,从Mono 2.6版本开始提供了一个新的编译器dmcs,它是C# 4.0的预览版(因为Mono 2.6将在C# 4.0正式发布之前发布)。
(这有点过时,因为我现在运行的是2.10.5.0,但没关系。)
编辑:作为替代方案,可以使用mcs,如此处指定,因为你正在运行2.10版本。它不支持特定的-langversion 4,但微软的编译器也不支持。
/langversion:<string>      Specify language version mode: ISO-1, ISO-2, 3,
                           or Default

一针见血。dmcs是4.0版本的目标编译器。 - sehe
@rapsalands:我相信大部分都可以。你可以运行兼容性检查器来查找缺失的内容。当然,你应该在Mono上彻底测试你的应用程序,因为可能存在一些微妙的差异。 - Jon Skeet
目前可以直接使用mcs,因为编译器不再使用System.Reflection。详细信息请参考:http://www.mono-project.com/Release_Notes_Mono_2.10#New_C.23_Compiler_Backend - konrad.kruczynski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接