【发布时间】:2014-03-25 16:32:56
【问题描述】:
我正在使用 Unity3D v4.2.2f1,它附带的 MonoDevelop 版本 - v2.8.2。
我发现在某些情况下 C# 代码可以在 Unity3D 中编译,但在 MonoDevelop 中则不行。例如,Unity3D 接受方法参数的默认值,但在 MonoDevelop 中导致“不允许默认参数设置 (CS0241)”。
我在网上找到的一般建议是不要尝试从 MonoDevelop 编译。很好 - 但我很想了解这种不匹配是如何产生的。我认为 Unity3D 和 MonoDevelop 都使用 Mono 编译 C#?是不是Unity3D自带了两个版本的Mono,一个给自己,一个给MonoDevelop?如果有,为什么?
在 Unity 中编译但在 MonoDevelop 中不编译的方法的第一行示例(在 MonoDevelop 中不编译但从 Unity3D 编译的位是对 setNative 的 '=false' 赋值):
public static void SetUnityVersion(string path, bool setNative=false) {
...implementation...
}
【问题讨论】:
-
我在非常罕见的情况下也观察到了低于 3.5 的情况。可以给个代码sn-p吗?
-
见上文 - 更新问题。
-
我刚刚试用了您在 Unity 3.4.3f1 (Mono 4.0.1) 中提供的代码,它编译得很好。如果我没记错的话,我的问题与代表们提到自己有关。
-
完全正确 - Unity 可以很好地编译它(可能使用某些版本的 Mono)。问题是尝试从 MonoDEVELOP 编译时...
-
不,抱歉我说得不准确:我是在 MonoDevelop 4.0.1 中完成的,而在 Unity 中不是。我也用 2.8.2 检查了它,它编译时没有任何抱怨。也许您的项目设置有问题。我会开始一个新的 Unity 项目,打开 Mono,添加一个脚本,然后查看它是否编译。如果不是 => 重新安装,如果是,那就是别的东西。顺便说一句,方法原型是什么意思? C# 不支持动态添加方法,如 JavaScript,只支持扩展方法。
标签: c# compiler-construction mono unity3d monodevelop