如果您告诉我没有这样的命令,我肯定会对罗斯林提起一个错误;如果我可以通过重新订购文件观察功能更改,而不是绝对不是确定性的。
simphest可能的再生产:
/* a file */
partial class Class1 {
public static int x = 3;
}
/* another file */
partial class Class1 {
public static int y = x;
}
/* Program.cs */
Console.WriteLine(Class1.y);
在脂肪文件系统上最简单。文件名不重要;您创建它们的顺序很重要。
编译器的行为确实取决于文件的排序。围绕部分类/成员的其他一些案例,可以对两者进行XML DOC评论,并且合并的顺序取决于文件订购。
编译器,如“ csc.exe进程”中,将确保其通过命令行传递的源文件的顺序是在内部交给并以正确的顺序处理的。给定文件的特定顺序,这绝对是确定性的 - 只是文件排序实际上是确定论的输入。如果您的情况下,相同的编译器调用具有相同的文件排序会产生不同的非确定性输出,我们绝对希望该错误。 wovey,端到端的工具使这种阴暗:正如您观察到的,MSBuild确实可能取决于您的文件系统或操作系统等。坦率地说,如果您的文件订购很重要,那么您可能只想不想使用Globbing,因为这只是在某个时候遇到麻烦!
我们在IDE中绝对有错误,当我们为IntelliSense创建“内部”编译器时,我们可能无法正确订购文件以匹配实际构建的订购。我们没有将这些错误优先考虑,因为它们很难击中。坦白说,在我为此工作的15年中,您可能是第一个值得注意的客户的赢家!