mono - 为什么有四个 Mono C# 编译器?

标签 mono

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/

相关文章:

c# - 初学者如何在 Linux 中开始使用 Mono?

c# - 在 OSX 上使用 MonoKickstart 时找不到 gdiplus.dll

c# - 如何将几个 .NET dll 打包成一个 dll

linux - Mono AOT 编译程序的事后调试

.net - System.ExecutionEngineException : Attempting to JIT compile method System. Threading.Interlocked:Exchange

c# - 在 Ubuntu/Mono 上运行的 HttpListener 返回 400 错误请求

asp.net - 如何防止用户代理: Eureka/1 to return source code

c# - 如何在 C# 或 F# 中使用 Travis-CI

macos - 无法在 OS X Mountain Lion 上安装 Mono

mono - iOS 6 Mono 和向后兼容性