4

VS2008に「データベースソリューション」プロジェクトがあります。これは、ある種のテンプレートから複数のDBベンダーの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

これは長い道のりかもしれませんが、私にとっては価値があります。私はこれをたくさんします。ありがとうございました!

4

1 に答える 1

2

IVsSingleFileGeneratorインターフェースには、タイプIVsGeneratorProgressのパラメーターを持つvoid Generate(...)メソッド呼び出しがあります。このインターフェイスには、エラーと警告をVisualStudioエラーリストに報告できるvoidGeneratorError()メソッドがあります。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でカスタムツールが実行され、エラーウィンドウに出力が生成されます。

于 2010-03-14T10:42:33.493 に答える