Существует ли какая-либо директива #pragma или аналогичная директива для сгенерированного кода C # для сопоставления номеров строк кода шаблона с номером строки C #?

StackOverflow https://stackoverflow.com/questions/1358487

Вопрос

У меня есть система шаблонов, которая выглядит аналогично старому ASP-коду.Я запускаю это через класс, который полностью переписывает это в исходный код C #, компилирует и, наконец, выполняет.

Что мне интересно, так это есть ли какая-то директива, подобная #pragma, которой я могу снабдить сгенерированный код C #, который приведет к тому, что ошибки компиляции будут соответствовать номерам строк в моем файле шаблона?

Например, допустим, у меня есть эта первая и единственная строка в коде моего шаблона:

Object o = datta; // should be data, compiler error

но затем, чтобы скомпилировать это, я должен добавить к нему пространство имен, класс, метод и некоторый базовый код, так что эта строка выше, которая является строкой № 1 в моем файле шаблона, на самом деле оказывается строкой № 17 (случайное число, просто для иллюстрации) в коде C #.Ошибка компилятора, естественно, пометит мою ошибку как находящуюся в строке # 17, а не в строке # 1.

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

Есть ли что-нибудь подобное в C # 3.5?

Это было полезно?

Решение

У вас есть #line директива препроцессора.

#line позволяет изменять номер строки компилятора и (необязательно) имя файла, выводимого для ошибок и предупреждений.

Тот Самый #line directive может быть использован на автоматизированном промежуточном этапе процесса сборки.Например, если строки были удалены из исходного файла исходного кода, но вы по-прежнему хотели, чтобы компилятор генерировал выходные данные на основе исходной нумерации строк в файле, вы могли бы удалить строки, а затем имитировать исходную нумерацию строк с помощью #line.

Тот Самый #line hidden директива скрывает последовательные строки от отладчика, так что, когда разработчик выполняет пошаговое выполнение кода, любые строки между #line hidden и следующий #line директива (при условии, что это не другая скрытая директива #line) будет перешагнута.Этот параметр также можно использовать, чтобы разрешить ASP.NET различать пользовательский и машинный код.Хотя ASP.NET является основным потребителем этой функции, вполне вероятно, что ею воспользуются другие генераторы исходных текстов.

A #line hidden директива не влияет на имена файлов или номера строк в отчетах об ошибках.То есть, если в скрытом блоке обнаружена ошибка, компилятор сообщит текущее имя файла и номер строки ошибки.

Тот Самый #line filename директива указывает имя файла, которое вы хотите отобразить в выходных данных компилятора.По умолчанию используется фактическое имя файла исходного кода.Имя файла должно быть заключено в двойные кавычки ("") и ему должен предшествовать номер строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top