我今天遇到了一个有趣的问题,我的测试在构建机器上始终失败,而即使使用相同的配置,它们在我的机器上运行得很好。当我查看故障转储中 Assert.AreEqual 输出的差异时,我看不到任何不同。经过一系列调查后,我发现测试用例源代码中的逐字字符串(跨越多行)在我的机器上使用 CRLF,但在构建机器上使用 LF,导致该字符串与生成的字符串进行比较字符串失败。事实证明,罪魁祸首是两个系统上的 Git 设置不一致,构建系统会自动将 CRLF 序列转换为 LF。
C# 规范是否说明了应如何解释逐字字符串中的换行符(可能使用 Environment.Newline,或至少使用一致的内容)?这似乎是一个可能以非常难以诊断和修复的方式困扰很多人的问题,尤其是对于 .NET Standard。例如,如果您有一个 .NET Standard 项目,并且团队成员同时使用 Linux 和 Windows,那么这可能会影响 Linux 团队成员或 Windows 团队成员。
该规范通过不解决这个问题来解决这个问题:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-struct https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure
在逐字字符串文字中,分隔符之间的字符将逐字解释,唯一的例外是引用转义序列.
由于行结尾没有例外,因此您可以获得源文件中使用的任何行结尾。正如你发现的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)