Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Unity3D和MonoDevelop编译C#_C#_Compiler Construction_Mono_Unity3d_Monodevelop - Fatal编程技术网

通过Unity3D和MonoDevelop编译C#

通过Unity3D和MonoDevelop编译C#,c#,compiler-construction,mono,unity3d,monodevelop,C#,Compiler Construction,Mono,Unity3d,Monodevelop,我使用的是Unity3D v4.2.2f1,它的MonoDevelop版本与-v2.8.2捆绑在一起 我看到有些情况下C代码将在Unity3D中编译,而不是在MonoDevelop中编译。例如,Unity3D接受方法参数的默认值,但在MonoDevelop中会导致“不允许使用默认参数设置(CS0241)” 我在网上找到的一般建议是不要试图从MonoDevelop编译。很好,但我很想了解这种不匹配是如何产生的。我认为Unity3D和MonoDevelop都使用Mono编译C#?Unity3D是否有

我使用的是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”赋值):


在Windows上安装Unity时,MonoDevelop默认使用Microsoft.Net Framework。正如所指出的,Unity使用“定制的Mono构建”

导致编译器错误的语言功能被调用,并在
C#4.0
中介绍。现在,MonoDevelop开发由Unity target
.Net Framework 3.5
生成的项目,它不支持此功能

如果您将生成项目的目标框架更改为
.NET4.0
(在Monodevelop中,右键单击project,然后单击
选项->常规->目标框架
),则所有内容都应该可以正常编译。但是,如果您在Unity中对项目进行任何更改(例如添加脚本),MonoDevelop项目文件将重新生成,您的更改将丢失

要解决此问题,您可以下载并安装的版本,然后在MonoDevelop中将其配置为默认运行时(
工具->选项->.Net运行时->添加
,找到已安装的Mono版本,然后点击
设置为默认
)。Monodevelop现在将使用
Mono
编译代码,Mono编译器不会抱怨默认参数值


这将为您省去在Unity和MonoDevelop之间切换以检查代码是否编译的一些麻烦。使用Unity 4.5.3f3和MonoDevelop 4.0.1进行测试。

我在3.5中也观察到了非常罕见的情况。你能展示一个代码片段吗?见上面更新的问题。我刚刚试用了你在Unity 3.4.3f1(Mono 4.0.1)中提供的代码,它编译得很好。如果我没记错的话,我的问题与代表们提到他们自己有关。确切地说,Unity编译得很好(大概使用了Mono的某个版本)。问题是当试图从MonoDEVELOP编译时……不,对不起,我不准确:我是在MonoDEVELOP 4.0.1中编译的,而不是在Unity中。我也用2.8.2检查了它,它编译时没有任何抱怨。也许你的项目设置有问题。我会启动一个新的Unity项目OpenMono,添加一个脚本,然后看看它是否可以编译。如果不是=>重新安装,如果是,则是其他内容。顺便问一下,你所说的方法原型是什么意思?C#不支持动态添加JavaScript中的方法,只支持扩展方法。
public static void SetUnityVersion(string path, bool setNative=false) {
    ...implementation...
}