.NET csc和Mono mcs的兼容性

Jak*_*les 5 .net mono command-line-interface

我知道.NET和Mono是二进制兼容的,但是给定一组源代码,csc和mcs会产生完全相同的100%相同的二进制CLI可执行文件吗?是否能够判断可执行文件是使用csc还是mcs编译的?

Mar*_*ell 5

很多东西在规范中没有完全定义,或者是特定于实现的扩展。

未完全指定的示例:

  • 类字段事件的同步语义;这对 ecma 规范中的实现是明确开放的;它在 MS 规范中进行了严格定义,但在 c# 4.0 中使用了不同的版本,该版本尚未出现在正式规范 IIRC 中
  • Expression构造(来自 lambdas);只是“在别处定义”(实际上不是)

实现扩展示例:

  • P/调用
  • COM 接口处理(即如何调用new接口)

所以不:不能保证在 csc 或 [g]mcs 之间具有相同的 IL - 但即使在不同版本的 csc 之间。

甚至更多:根据调试设置、是否启用优化以及定义的一些编译常量(例如 DEBUG 或 TRACE),相同的编译器将生成不同的代码。