我知道.NET和Mono是二进制兼容的,但是对于一组源代码,csc和mcs会生成完全相同的CLI可执行文件吗?有没有办法判断一个可执行文件是使用csc还是mcs编译的呢?
我知道.NET和Mono是二进制兼容的,但是对于一组源代码,csc和mcs会生成完全相同的CLI可执行文件吗?有没有办法判断一个可执行文件是使用csc还是mcs编译的呢?
我相信他们不会从相同的源代码生成相同的IL。即使是不同版本的MS C#编译器也不会。
优化器将以不同的方式工作并创建略有不同的代码。
我预计在实现复杂功能(如迭代器、为lamdas捕获的局部变量等)方面会有更大的差异...
然后还有任意的编译器生成名称,例如匿名类型。没有理由他们应该使用相同的命名方案。
如果有一些包含您的编译器名称和版本的程序集元数据,我也不会感到惊讶。
string x = "a" + s0 + s1;
=>string x = string.Concat("a", s0, s1);
。我怀疑在这个例子中它们并没有什么区别。 - R. Martinho Fernandes