2

プロジェクト内のコードファイルの前処理を行うカスタムmsbuildタスクを作成しました。私たちができるようにしたいのは、標準のエラーリストウィンドウにエラーと警告を表示することです。

Visual Studioは、これを行うことになっているTaskLoggingHelper(Log.LogError)メソッドを提供します...しかし、Log.LogError(message、messageArgs)が正しいファイル名と行番号を入力しないことがわかりました...そしてLog.LogError(subCategory、errorCode、helpKeyword、file、lineNumber、columnNumber、endLineNumber、endColumnNumber、message、messageArgs)は、明示的に設定した場合でもメッセージをnullにできないことを示すエラーを返します。

Visual Studioがオーバーロードされた(より詳細な)メソッドを使用していないようです。

私が送信しているコード行は次のとおりです。

string fileName = "main.c";
int lineNum = 415;
int colNum = 5;
string message = "Error Message Text.";

Log.LogError("", "", "", fileName, lineNum, colNum, 0, 0, message, null); 

誰かがこのメソッドのオーバーロードを使用してMSBuildのエラーをログに記録しましたか?

ありがとう

** アップデート **

ニックの回答(下記)を読んだ後、私は次のテストを行いました...

Log.LogError("test1", "test2", "test2", fileName, lineNum, colNum, 0, 0, message);

messageArgsを削除し、最初の3つのパラメーターにテキストを追加しました。私が得た応答は驚くべきものでした...ErrorListウィンドウにリストされたメッセージは「エラーメッセージテキスト」ではなく「test1」でした。しかし、これが状況に光を当てているかどうかはわかりません。

デイブ

4

2 に答える 2

3

この問題を長時間突っ込んだ後は、Log.LogError( ""、 ""、 ""、fileName、lineNum、colNum、0、0、message、null);を取得できませんでした。動作するソリューション。何らかの理由で、この過負荷は正しく示唆されていないようです。私は同じことをする別の解決策を見つけることになりました。他の誰かが同じことをしたい場合に備えて、自分のソリューションを提供するのが良いと思いました。

BuildErrorEventArgs errorEvent = new BuildErrorEventArgs("", "", fileName, lineNum, colNum, 0, 0, messageErr, "", "");
BuildEngine.LogErrorEvent(errorEvent);

したがって、私が行ったことは、ITaskクラスの一部としてIBuildEngineインターフェイスを実装することでした。それから、エラーのすべての詳細情報にアクセスできるBuildErrorEventArgs構造を渡すことができるLogErrorEventにアクセスできました。

お役に立てれば

于 2013-02-06T17:01:04.690 に答える
-1

Microsoft.Build.Utilities.Taskから継承している場合は、これを確実に使用できるはずです。私はそれをより単純なオーバーロード構文で使用してきました:

  base.Log.LogError(Strings.ItemsToFilterMissingError);

大きなオーバーロードで、メッセージ形式の文字列に引数を指定したのはタイプであることに気づきました

 params object[] messageArgs

明示的なnullを渡す代わりに、パラメーターを省略できると思います。それはあなたの問題かもしれません。

于 2013-01-15T06:09:51.130 に答える