如何使MonoDevelop针对.NET 2.0框架使用C# 4.0编译器?

3
这是很容易在Visual Studio中实现的,但我需要使用MonoDevelop来实现,因为Visual Studio编译的DLL与Unity不兼容。MonoDevelop DLL运行良好,但我想在针对.NET 2.0运行时的情况下使用默认函数参数(C# 4.0功能)。
这是否可能使用MonoDevelop?我该如何设置? 添加:Visual Studio和MonoDevelop的构建命令行 我已经整理了参数以便更轻松地进行比较: MonoDevelop:目标= Mono / .NET 4
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
/noconfig
/warn:4
"/define:TRACE"
/optimize+
"/out:C:\TestLibraries\TestEditor\bin\Release\TestEditor.dll"
/t:library

/nologo

"/r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll"
"/r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll"
"/r:C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.dll"
"/r:C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEngine.dll"

/fullpaths
/utf8output
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
/warn:4
"/define:TRACE"
/optimize+
"/out:C:\TestLibraries\TestEditor\bin\Release\TestEditor.dll"
/t:library

/nologo
-nostdlib

"/r:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll"
"/r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll"
"/r:C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.dll"
"/r:C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEngine.dll"

/fullpaths
/utf8output

Visual Studio : Target = .NET 4

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe
/noconfig
/nowarn:1701,1702
/warn:4
/define:TRACE
/optimize+
/out:obj\Release\TestEditor.dll
/target:library

/nostdlib+ /errorreport:prompt

/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll"
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll"
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll"
/reference:"C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEngine.dll"

/debug:pdbonly
/filealign:512

Visual Studio:目标=.NET 3.5(第二个有趣的)

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe
/noconfig
/nowarn:1701,1702
/warn:4
/define:TRACE
/optimize+
/out:obj\Release\TestEditor.dll
/target:library

/nostdlib+ /errorreport:prompt

/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll"
/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll
/reference:"C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEngine.dll"

/debug:pdbonly
/filealign:512
2个回答

2

最新稳定版的Mono(2.10.9)自带的 2.0 C# 编译器(mcs/gmcs)支持默认函数参数。我刚刚创建了一个新的控制台项目,将目标框架更改为 2.0,并成功编译了默认函数参数。


在Windows上,似乎Mono使用Microsoft C#编译器的方式与Visual Studio不同。有没有一种方法可以强制它使用Mono的编译器? - Lea Hayes
1
我相信你可以在MonoDevelop的偏好设置/.NET运行时中进行选择。 - Rolf Bjarne Kvinge

2

这里有两个问题:

Q1) 如何使用当前的MonoDevelop构建与.Net 2.0兼容的.dll或.exe?

A: 我不知道是否可以。一个解决方法是下载并安装MonoDevelop 2.4.x。

Q2) 我想要C# 4.0默认函数参数,但我想要针对.Net 2.0

A: 你不能 :) 如果你想要针对.Net 2.0,那么你需要使用那些与.Net 2.0兼容的C#语言特性子集。如果你想要使用C# 4.0语言特性,那么你可能至少需要一些.Net 4.0库...这实际上意味着你需要.Net 4.0。


我对此并不了解,但我在几个StackOverflow答案中读到,在Visual Studio中这是可能的,因为默认参数仅是C# 4的语言特性,并且可以与.NET 2.0一起使用。 - Lea Hayes
1
在这种情况下,“语言”通常与.Net运行时密切相关。存在两个问题:1)可能需要哪些(潜在的新的不兼容的).Net程序集,以及编译器将为给定的语言特性生成什么(潜在的新的不兼容的)字节码。你可以赌一下……但是有多种失败的方式。:( 这个链接更详细地解释了后一个问题:公共中间语言基础设施 - paulsm4
经过进一步的实验,我发现即使目标框架设置为“3.5”,Visual Studio仍然始终使用.NET 4框架中最新的C#编译器,它只是假定指定的框架。MonoDevelop使用指定的框架,但它也使用指定框架中的C#编译器。我将在我的问题中添加VC和MD使用的命令行。 - Lea Hayes

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