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

MonoDevelop:Target = Mono / .NET 3.5(第一个有趣的)

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:目标 = .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 : Target = .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
4

2 回答 2

2

这里有两个问题:

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

A:我不知道你能不能。一种解决方法是下载并安装 MonoDevelop 2.4.x。

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

答:你不能 :) 如果你想以 .Net 2.0 为目标,那么你需要使用与 .Net 2.0 兼容的 C# 语言特性的子集。如果您想使用 C# 4.0 语言功能,那么您可能至少需要一些.Net 4.0 库……这实际上意味着您将需要 .Net 4.0。

于 2012-08-25T02:51:59.570 回答
2

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

于 2012-09-04T10:40:42.553 回答