通过Unity3D和MonoDevelop编译C#

时间:2014-03-25 16:32:56

标签: c# compiler-construction mono unity3d monodevelop

我使用的是Unity3D v4.2.2f1,它与MonoDevelop的版本捆绑在一起--v2.8.2。

我看到有些情况下C#代码将在Unity3D中编译,但不会在MonoDevelop中编译。例如,Unity3D接受方法参数的默认值,但结果为"不允许默认参数设置(CS0241)"在MonoDevelop。

我在网上找到的一般建议是不要尝试从MonoDevelop编译。很好 - 但我很想知道这种不匹配是如何产生的。我认为Unity3D和MonoDevelop都使用Mono编译C#? Unity3D是否带有两个版本的Mono,一个用于自身,一个用于MonoDevelop?如果是这样,为什么?

在Unity中编译但不在MonoDevelop中编译的第一行方法(在MonoDevelop中编译但在Unity3D中编译的位是' = false'对setNative的赋值):

public static void SetUnityVersion(string path, bool setNative=false) {
    ...implementation...
}

1 个答案:

答案 0 :(得分:3)

在Windows上安装Unity时,MonoDevelop默认使用Microsoft .Net Framework。 Unity指出here使用“Mono的自定义构建”。

导致编译器错误的语言功能称为Optional parameters,并在C# 4.0中引入。现在,由Unity目标.Net Framework 3.5生成的MonoDevelop项目不支持此功能。

如果您将生成的项目的目标框架更改为.Net 4.0(在Monodevelop中右键单击项目,然后options->general->Target Framework),一切都应该编译好。但是如果您在Unity中对项目进行任何更改(例如添加脚本),MonoDevelop项目文件将被重新生成,您的更改将会丢失。

要解决此问题,您可以下载并安装Mono for Windows版本,然后将其配置为MonoDevelop中的默认运行时(Tools->Options->.Net Runtimes->Add,找到已安装的Mono版本,然后点击Set as Default })。 Monodevelop现在将使用Mono来编译代码,而Mono编译器不会抱怨默认参数值。

这样可以省去在Unity和MonoDevelop之间切换的麻烦,只是为了检查代码是否编译。使用Unity 4.5.3f3和MonoDevelop 4.0.1进行测试。