У меня есть некоторые модульные тесты, которые, похоже, не работают, потому что они зависят от предположения, что разрыв строки внутри локально скомпилированной строки здесь-документа должен совпадать с Environment.NewLine .
Т.е.
var testString=@"a multiline
string";
//this fails
teststring.Should().Be("a multiline" + Environment.Newline +"string");
Реальный тест значительно сложнее, он компилируется и запускается на компьютере, который я не контролирую, поэтому трудно определить точную причину, но, похоже, онсводится к этому несоответствию.
Спецификация C # (см. раздел о строковых литералах) говорит, что "Строковый литерал может содержать несколько строк" , нофактически не говорит, какой стиль разрыва строки будет использован.
Моя рабочая теория заключается в том, что в переносах строк нет ничего волшебного, и что компилятор просто использует любой стиль в файле с исходным кодом, который проверяется на локальной машине.Поэтому, если кто-то неправильно интерпретирует свои строки в RCS, возможно, строка, скомпилированная, имеет строки в стиле Unix, даже если она компилируется на компьютере с Windows или наоборот.
Так что мойвопрос на самом деле:
Есть ли формальное описание того, как следует кодировать разрывы строк в многострочном дословном строковом литерале?
Если нет, естьальтернативное объяснение того, почему приведенный выше тест может иногда давать сбой?
Я знаю, что Environment.NewLine является переменной runtime , поэтому тест может завершиться неудачно, есликомпилируется на одной машине, затем запускается на другой, но в этом случае оказывается, что она компилируется и запускается на той же машине.