今天我遇到了一个有趣的问题,我的测试在构建机器上一直失败,而它们在我的机器上运行良好,即使使用相同的配置。当我查看 Assert.AreEqual 在故障转储中输出的差异时,我看不出有什么不同。经过大量调查,我发现测试用例源代码中的逐字字符串(跨越多行)在我的机器上使用 CRLF,但在构建机器上使用 LF,导致将该字符串与生成的字符串进行比较字符串失败。罪魁祸首是两个系统上的 Git 设置不一致,构建系统会自动将 CRLF 序列转换为 LF。
C# 规范是否说明了如何解释逐字字符串中的换行符(可能使用 Environment.Newline,或者至少是一致的)?这似乎是一个问题,可能会以非常难以诊断和难以修复的方式困扰很多人,尤其是对于 .NET Standard。例如,如果您有一个 .NET Standard 项目,并且在 Linux 和 Windows 上都有团队成员,那么这可能会影响 Linux 团队成员或 Windows 团队成员。