環境:
C# プロジェクト、Visual Studio 2008、C#、.Net 3.5、MSBuild
目的:
C# プロジェクト用に独自のカスタム ビルド タスクを実行し、プラットフォーム (Soln 構成プラットフォーム) に基づいて、ビルド前に Project オブジェクト自体にいくつかの操作を行います。BuildAction を EmbeddedResource に設定するなど。
それが終わったら、私は電話しますProject.Build()
。とにかく Project オブジェクトを変更すると、ファイルがダーティ (および TFS からチェックアウト) とマークされるため、GlobalEngine で Project オブジェクトを使用したくありません。
問題:
エンジンとプロジェクトの独自のインスタンスを使用しているため、ビルド出力、エラーを VS に送信できません。からブール値を取得するだけですProject.Build()
。アクセスなどを許可できるように接続できるイベントが見つかりませんBuildErrorEventArgs
。Log.LogErrorEvent()
メッセージをVSエラーリストに記録するために使用できることを知っています。しかし、それを行うには、最初にビルド出力自体を取得する必要があります。
コード:
// Execute method in my custom build task class, derives from a BaseTask class
public override bool Execute()
{
Engine engine = new Engine();
Project project = new Project(engine);
project.Load(ProjectName);
Log.LogMessage(Microsoft.Build.Framework.MessageImportance.High, "Got the Project");
// Set the project's DefaultTargets to "Build" to be able to build with CSharp targets
project.DefaultTargets = "Build";
IsBuilt = project.Build(); // Isbuilt bool is a property in my BaseTask class
// Here's where I want to get Build output and direct it to VS output window and errorlist window
engine.Shutdown();
return base.Execute();
}