我使用的是Unity3D v4.2.2f1,以及它附带的MonoDevelop版本- v2.8.2。
我发现在某些情况下,C#代码将在Unity3D中编译,而不是在MonoDevelop中编译。例如,Unity3D接受方法参数的默认值,但结果是MonoDevelop中“不允许默认参数设置(CS0241)”。
我在网上发现的一般建议是不要尝试从MonoDevelop编译。好吧-但我很想知道这种错配是怎么发生的。我认为Unity3D和MonoDevelop都使用Mono编译C#?是Unity3D附带了两个版本的Mono,一个用于自身,另一个用于MonoDevelop?如果是,为什么?
示例在MonoDevelop中编译的第一行方法(在MonoDevelop中不编译,但从Unity3D编译的位是'=false‘分配给setNative):
public static void SetUnityVersion(string path, bool setNative=false) {
...implementation...
}发布于 2014-09-08 20:05:24
在上安装时,MonoDevelop默认使用。而且,正如这里所指出的,统一使用了“Mono的自定义构建”。
导致编译器错误的语言特性称为可选参数,并在C# 4.0中引入。现在,由不支持此特性的Unity .Net Framework 3.5生成的MonoDevelop项目。
如果您将生成的项目的目标框架更改为.Net 4.0 (在Monodevelop中右键单击项目,然后是options->general->Target Framework),那么一切都应该编译得很好。但是,如果您对团结中的项目进行任何更改(例如添加一个脚本),MonoDevelop项目文件将被重新生成,您的更改将丢失。
要解决这个问题,您可以下载并安装用于Windows的Mono发行版,然后在MonoDevelop中将其配置为默认运行时(Tools->Options->.Net Runtimes->Add,查找已安装的Mono版本,然后单击Set as Default)。Monodevelop现在将使用Mono编译代码,Mono编译器不会抱怨默认参数值。
这将为您节省一些在之间切换的麻烦,只需检查代码是否已编译。使用Unified4.5.3f3和MonoDevelop 4.0.1进行测试。
https://stackoverflow.com/questions/22640833
复制相似问题