0

MSBuild2005 を使用して、現在ビルド中のプロジェクトを追跡し、受信したエラー/警告をプロジェクトに割り当てる自己記述の Logger クラスを使用してビルドします。MSBuild は、参照されたプロジェクトに「何らかの方法で」アクセスするときに ProjectStarted/FinishedEventArgs も呼び出すため、これはちょっと注意が必要でした。しかし、私はそれを機能させました。

次に、MSBuild2008 に切り替えます。並列ビルド (/m:2 以上; これは私が待ち望んでいた機能です!) をオンにするまで、すべてが正常に機能します。私の理解では、BuildEventMessages の ThreadId プロパティを監視することで、並列タスクを追跡できるということでした。ただし、並列ビルドを有効にするとすぐに、これは期待どおりに機能しません。あるプロジェクトが ThreadId 1 でビルドされ、別のプロジェクトが ThreadId 5 で開始されるケースがありました。しかし、その後、3 番目のプログラムが ThreadId 5 で開始されます! 興味深いことに、これらのプロジェクトは「スタックのように」動作します。つまり、2 番目のプロジェクトが最初のプロジェクトの前に終了します。だから私は考えました:大丈夫かもしれませんが、どうすればエラーを割り当てることができますか。1 つのプロジェクトに誤ったコードを挿入したことを確認するため。その結果、エラー メッセージにはまったく新しい ThreadId (1 または 5 ではなく 6) が含まれていました。

私の質問は次のとおりです。エラー/警告メッセージをプロジェクトに割り当てるにはどうすればよいですか?

4

1 に答える 1

0

私自身の答えが好きです:

.Net 3.5 では、BuildEventArgs クラスに、ProjectContextId を含む新しいプロパティ BuildEventContext が含まれています。これは一度に一意であり、正確な割り当てが可能です。

于 2009-01-15T15:48:19.360 に答える