繁体   English   中英

C#Verbatim String Line Breaks:CRLF,CR还是LF?

[英]C# Verbatim String Line Breaks: CRLF, CR, or LF?

今天我遇到了一个有趣的问题,我的测试在构建机器上一直失败,即使使用相同的配置它们在我的机器上工作得很好。 当我在故障转储中查看Assert.AreEqual输出的差异时,我看不出有什么不同。 经过一系列调查后,我发现测试用例源代码中的逐字字符串(跨越多行)在我的机器上使用CRLF,但在构建机器上使用LF,导致该字符串与生成的比较字符串失败。 罪魁祸首证明两个系统上的Git设置不一致,构建系统自动将CRLF序列转换为LF。

C#规范是否说明了如何解释逐字字符串中的换行符(可能使用Environment.Newline,或者至少是一致的)? 这似乎是一个问题,可能会让很多人难以诊断并且难以修复,尤其是.NET Standard。 例如,如果您有一个.NET Standard项目,并且在Linux和Windows上都有团队成员,那么很可能会咬住Linux团队成员或Windows团队成员。

该规范通过不解决它来解决这个问题:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure

在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote_escape_sequence

由于行结尾没有异常,因此您可以获得源文件中使用的任何行结尾。 你发现了。

无论每个Git实例的设置如何,基于Git帮助文档的此解决方案都可以帮助确保一致性。

根据https://help.github.com/articles/dealing-with-line-endings/中的文档

(可选)您可以通过配置特殊的.gitattributes文件来配置Git基于每个存储库管理行结束的方式。 此文件将提交到存储库并覆盖个人的core.autocrlf设置,从而确保所有用户的行为一致,无论其Git设置如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM