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

最佳答案

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

未完全指定的示例:

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

  • 实现扩展的示例:
  • P/调用
  • COM接口(interface)处理(即,如何在接口(interface)上调用new)

  • 因此,不行:不能保证在csc或[g] mcs之间具有相同的IL,甚至不能在csc的不同版本之间具有相同的IL。

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

    关于.net - .NET csc和Mono mcs的兼容性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5850142/

    10-12 21:16