This page解释了四种不同的 mono 编译器 - mcs/gmcs/smcs/dmcs。
对我来说,拥有四个 C# 编译器有点奇怪。通常,新版本的编译器会保持向后兼容性。
我认为这是因为运行时支持问题,但 Microsoft 的 C# 有一个支持所有运行时版本的 csc.exe。
最佳答案
这是因为 Mono 的编译器是用 C# 编写的,并使用 System.Reflection,这意味着它只能从运行它的运行时访问 mscorlib。因此,例如,smcs 不仅仅针对 2.1,它实际上使用 2.1 corlib 等。
有一段时间计划让 *mcs 使用 Mono.Cecil 或 Ikvm.Reflection 而不是 System.Reflection,这意味着可能会有一个带有参数的 mcs 编译器来针对不同的运行时。
微软的编译器没有这个限制,因为它不使用.NET Reflection(它是用 native 代码编写的)。
关于mono - 为什么有四个 Mono C# 编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3882590/