Выборочный вывод => Интерпретация списка ошибок в IDE VS2008 - PullRequest
4 голосов
/ 05 марта 2010

У меня есть проект «Решение для базы данных» в VS2008 - он генерирует SQL для более чем одного поставщика БД из какого-то шаблона.Чтобы сэкономить время, у меня также есть настроенный инструмент в VS2008 (скрипт Python), который может скомпилировать отдельную хранимую процедуру.Теперь, с помощью скрипта Python, я могу свободно обрабатывать вывод и принимать его в любой форме.Я играю с идеей, чтобы эти ошибки и предупреждения каким-то образом распознавались, и заполнял список ошибок / предупреждений с возможностью нажатия.Вот как выглядит типичная ошибка Oracle:

LINE/COL ERROR
-------- -----------------------------------------------------------------
324/5    PL/SQL: Statement ignored
324/82   PLS-00363: expression 'VSOURCE_SYSTEM_ID' cannot be used as an
     assignment target
Warning: Procedure created with compilation errors.
PROCEDURE: ADD_PROPOSED error on creation
Errors for PROCEDURE ADD_PROPOSED:
LINE/COL ERROR

Это может быть далеко, но оно того стоит для меня.Я много занимаюсь этим.Спасибо!

1 Ответ

2 голосов
/ 14 марта 2010

Интерфейс IVsSingleFileGenerator имеет вызов метода void Generate (...) , который имеет параметр типа IVsGeneratorProgress .Этот интерфейс имеет метод void GeneratorError () , который позволяет сообщать об ошибках и предупреждениях в список ошибок Visual Studio.GenerateError () принимает строку и столбец среди других параметров, поэтому я предполагаю, что двойной щелчок по вашей пользовательской ошибке приведет вас к соответствующему месту в вашем исходном файле.

Чтобы собрать все вместе, я бы сделал что-то вродеследующее:

public class MyGenerator : IVsSingleFileGenerator
{
   public Generate(string path, string inputContents, string namespace, IntPtr[] outputContents, out unit outputLength, IVsGeneratorProgress progress)
   {
      // Invoke your Python script

      // Parse the error output from either a file or structure
      // Assume you generate two lists: one for warnings, one for errors

      foreach (var error in PythonErrors)
        progress.GenerateError(false, 0, error.Text, error.Line, error.Column);

      foreach (var warning in PythonErrors)
         progress.GenerateError(true, 0, warning.Text, warning.Line, warning.Colum);
   }
}

Скомпилируйте это в сборку.(Мне неясно, должен ли это быть EXE или DLL, но я подозреваю, что любой из них будет работать, так как у вас есть класс, который реализует правильный интерфейс.) Затем перейдите к свойствам каждого файла SQL в вашем проекте и свяжите MyGeneratorпользовательский инструмент с ним.При компиляции проекта Visual Studio теперь должна запустить свой собственный инструмент и сгенерировать вывод в окне ошибок.

...