设置<Deterministic>true</Deterministic>时Roslyn编译器文件编译顺序问询
文件传递顺序影响Roslyn编译行为,关于true的文件顺序疑问
- 经测试,向Roslyn编译器传递源文件的顺序会改变程序运行行为,文件名本身不影响,但文件传递顺序确实会导致功能变化。
- 默认项目中使用通配符(如
**/*.cs)展开文件时,顺序不稳定;而项目配置中存在<Deterministic>true</Deterministic>选项,我需要明确:当启用该选项时,编译器接收文件的顺序是否固定? - 目前查阅相关文档未找到明确说明,如果该选项下文件顺序仍无固定规则,我将向Roslyn提交Bug——因为文件顺序导致功能变化完全违背了编译确定性的设计初衷。
最简复现示例
文件1:
partial class Class1 { public static int x = 3; }
文件2:
partial class Class1 { public static int y = x; }
Program.cs:
Console.WriteLine(Class1.y);
复现细节
该问题在FAT文件系统中最易触发,文件的创建顺序决定了通配符展开后传递给编译器的顺序,进而导致Class1.y的初始化结果不同(取决于x是否已完成初始化)。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

