Jam*_*mes 5 c# newline verbatim-string
今天,我遇到了一个有趣的问题,即使在使用相同配置的情况下,我的测试在构建机器上也能正常运行时,在构建机器上始终无法通过测试。当我查看故障转储中Assert.AreEqual输出的差异时,看不到任何差异。经过一番调查,我发现测试用例源代码中的逐字字符串(跨越多行)在我的计算机上使用CRLF,但在构建计算机上使用LF,导致该字符串与生成的字符串进行比较字符串失败。罪魁祸首是两个系统上的Git设置不一致,构建系统会自动将CRLF序列转换为LF。
C#规范是否说明了应如何解释逐字字符串中的换行符(也许使用Environment.Newline或至少是一些一致的东西)?这似乎是一个问题,可能会以非常难以诊断和解决的方式(特别是使用.NET Standard)咬伤很多人。例如,如果您有一个.NET Standard项目,并且在Linux和Windows上都有团队成员,则这很可能会伤及Linux团队成员或Windows团队成员。
小智 5
该规范通过不解决这个问题来解决这个问题:
在逐字字符串文字中,分隔符之间的字符会逐字解释,唯一的例外是quote_escape_sequence。
由于行结尾没有例外,因此您可以获得源文件中使用的任何行结尾。正如你发现的那样。