我知道.NET和Mono是二进制兼容的,但是给定了一组源代码,csc和mcs会产生完全相同的100%相同的二进制CLI可执行文件吗?能否判断一个可执行文件是使用csc还是mcs编译的?
最佳答案
很多东西在规范中没有完全定义,或者是实现特定的扩展。
未完全指定的示例:
Expression
构造(来自lambdas);只是“在其他地方定义”(实际上不是)实现扩展的示例:
new
)因此,不行:不能保证在csc或[g] mcs之间具有相同的IL,甚至不能在csc的不同版本之间具有相同的IL。
甚至更多:取决于调试设置,是否启用优化以及定义了一些编译常量(例如DEBUG或TRACE),同一编译器将生成不同的代码。
关于.net - .NET csc和Mono mcs的兼容性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5850142/