Сообщение об ошибке компилятора: CS1009: нераспознанная escape-последовательность

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\9d389ed9\2c615f86\App_Web_index.cshtml.c114ca27.wbkbq-st.0.cs    Line: 44 

Кто-то проверяет, что вчера проект работал нормально, а сегодня - нет. он компилируется и собирается без каких-либо проблем, но не работает.

4 ответа

В строке 44: у вас 81 обратная косая черта. В строках 45 и 46 у вас есть 80 каждая. При использовании в строковом литерале символ обратной косой черты используется как символ "escape" для обозначения таких вещей, как новые строки и табуляции. Если вы действительно хотите использовать обратную косую черту в вашей строке, вам нужно указать 2 последовательных обратных слеша для каждого желаемого обратного слеша. Так как в строке 44 у вас нечетное количество обратных слешей, вы получаете ошибку.

Если вам действительно нужно такое количество обратных слешей, вы можете отключить escape-символ в C#, поставив перед строковым литералом символ @, например так:

WriteLiteral(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

Кроме того, вы можете удалить одну из обратных косых черт из строки 44.

Просто используйте этот конструктор

new String('\\', 80)

чтобы получить строку из 80 обратных слешей.

Я получил то же самое, это автоматический код, мой проект ASP.net с MVC 4, Razor. Этот код не введен нами. Только получая эту ошибку при новом развертывании, другие развертывания того же кода работают нормально,

Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\e22c2559\92c7e946\App_Web__viewstart.cshtml.cdcab7d2.gtokpxja.0.cs    Line: 44 

Проблема здесь (как упоминалось в ответе Бо Флексона) заключается в автоматически сгенерированном коде, а не в физическом написании представления с (большим) нечетным числом символов косой черты в нем.

Одно из решений, описанных в ответе на этот вопрос, заключается в простой перекомпиляции и повторном развертывании.

Для меня это не сработало, потому что проблема, похоже, была в порядке сборки нашего большого решения. Сначала я наткнулся на решение, сделав несколько небольших изменений в отдельном представлении в проекте, находящемся глубже в иерархии, что заставило его правильно перестроить проект с проблемным представлением. С тех пор мне повезло, когда я перестраивал проекты один за другим, а не полагался на полное перестроение решения, чтобы сделать заказ правильным.

Другие вопросы по тегам