Я написал инструмент командной строки, который предварительно обрабатывает несколько файлов, а затем компилирует их с помощью CodeDom. Инструмент записывает уведомление об авторских правах и некоторый прогресс-текст в стандартный вывод, а затем записывает все ошибки на этапе компиляции в следующем формате:
foreach (var err in results.Errors) {
// err is CompilerError
var filename = "Path\To\input_file.xprt";
Console.WriteLine(string.Format(
"{0} ({1},{2}): {3}{4} ({5})",
filename,
err.Line,
err.Column,
err.IsWarning ? "" : "ERROR: ",
err.ErrorText,
err.ErrorNumber));
}
Затем он записывает количество ошибок, например «14 ошибок».
Это пример того, как ошибка появляется в консоли:
Path\To\input_file.xrpt (73,28): ERROR: An object reference is required for the non-static field, method, or property 'Some.Object.get' (CS0120)
Когда я запускаю это как настраиваемый инструмент в VS2008 (вызывая его в командной строке события после сборки одной из сборок моего проекта), ошибки выглядят красиво отформатированными в Список ошибок с правильным текстом в каждом столбце. Когда я пролистываю имя файла, появляется полный путь. Строка и столбец отличаются от исходного файла из-за предварительной обработки, которая в порядке. Единственное, что выделяется, это то, что проект, указанный в списке, является тем, который имеет событие post-build.
Проблема в том, что когда я дважды щелкаю по ошибке, ничего не происходит. Я ожидал, что файл откроется в редакторе.
Я хорошо осведомлен о пространстве имен Microsoft.VisualStudio.Shell.Interop
, но я думаю, что это должно быть возможно, просто написав в стандартный вывод .
РЕДАКТИРОВАТЬ : Я заметил некоторые моменты и решил это сам: