#visual-studio #hook #visual-studio-extensions #visual-studio-addins #vsix
#visual-studio #hook #visual-studio-extensions #visual-studio-addins #vsix
Вопрос:
Я работаю над расширением Visual Studio, которое будет «очищать» сообщения об ошибках компиляции, чтобы их было легче читать.
Я уже знаю, как генерировать свои собственные ошибки. Вместо этого я пытаюсь изменить / заменить текст сообщений об ошибках, которые Visual Studio добавляет в панель списка ошибок в результате синтаксического анализа выходных данных компиляции.
До сих пор мне не удалось найти способ сделать это. Вот мои выводы:
- Все IVsTaskItems в SVsErrorList доступны только для чтения, поэтому я не могу редактировать их напрямую.
- Я также не могу удалить IVsTaskItems по той же причине (и, следовательно, не могу заменить их своими).
- Я могу добавить свой собственный текст в панель окна вывода сборки, но я не могу изменить существующий текст, чтобы отредактировать сообщения об ошибках, прежде чем Visual Studio их проанализирует.
Есть ли какой-либо другой способ достичь этой цели? Есть ли в расширении способ:
- как перехватить вызов, который VS выполняет внутренне, чтобы добавить сообщение об ошибке в список ошибок и изменить его до его обработки?
- чтобы перехватить выходные данные процесса сборки и изменить их до того, как они будут обработаны VS?
- для достижения этого с помощью каких-либо других средств?
Комментарии:
1. Вы определенно можете что-то сделать, потому что я уже использую расширение, которое подключается к процессу сборки и изменяет цвет окна вывода в зависимости от того, выполняется сборка проекта или сбой. Однако понятия не имею, как это делается. VSColorOutput: visualstudiogallery.msdn.microsoft.com /…
2. @demoncodemonkey Окно вывода представляет собой обычный текстовый вид с отключенным редактированием. Расширение, на которое вы ссылаетесь, является просто подсветкой синтаксиса, но не имеет никакого контроля над фактическим содержимым окна.
Ответ №1:
Правильным способом сделать это было бы либо изменить выходные данные вашего процесса компиляции, либо изменить способ, которым ваш проект system и / или .targets file передает информацию от компилятора в IDE. Если у вас нет контроля ни над компилятором, ни над системой проекта, то это было бы сложной или невыполнимой задачей.
- Отображаемые задачи реализуются
IVsTaskItem
, и этот интерфейс фактически реализуется клиентским кодом, поэтому нет никаких гарантий, что элемент задачи предоставит возможность изменять какие-либо из его значений. IVsTaskList2
Интерфейс добавляет методRemoveTasks
, но для этого требуется, чтобы у вас был файл cookie поставщика, который был возвращен при регистрации поставщика (и нет способа получить это).
Комментарии:
1. К сожалению, я хотел бы, чтобы это расширение не зависело от того, как информация передается в IDE (например, для поддержки произвольных компиляторов, а также внешних инструментов сборки). Вот почему я предполагаю, что единственный способ сделать это — использовать какой-то обман перехвата на основе перехвата. (PS: спасибо за вашу работу над ANTLR4; я использовал его с большим успехом).
2. Да, это просто не поддерживается. И нет ничего, что вы могли бы «зацепить» в любом смысле этого слова…
3. Спасибо за подтверждение, Джейсон.