2

コードを介してMSBUILDを実行し、ビルドの進行中に非同期ステータスを取得したいと考えています(TeamCityや他のビルドランナーと同様)。

私は次のコードを使用しています:

var projectFileName = @"...\MyApplication\MyApplication.sln";
ProjectCollection pc = new ProjectCollection();
var GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Configuration", "Debug");
GlobalProperty.Add("Platform", "x86");

var buildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null);

var buildResult = BuildManager.DefaultBuildManager.Build(new BuildParameters(pc), buildRequest);

コードを介して現在実行中のMSBUILDタスクを取得する方法はありますか?

4

1 に答える 1

9

build を非同期に呼び出し、進行状況を追跡できるループで iscomplete をテストする必要があります。

private void button1_Click(object sender, EventArgs e)
    {
        var projectFileName = @"...\MyApplication\MyApplication.sln";   
       ProjectCollection pc = new ProjectCollection(); 
       var GlobalProperty = new Dictionary<string, string>(); 
       GlobalProperty.Add("Configuration", "Debug"); 
       GlobalProperty.Add("Platform", "x86");
       BuildManager.DefaultBuildManager.BeginBuild(new BuildParameters(pc));
       BuildRequestData request = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null); 
       BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(request); 
        submission.ExecuteAsync(null, null);
        int cpt = 0;
        while (!submission.IsCompleted)
        {
            cpt++;
            textBox1.Text = cpt.ToString();
        }


        BuildManager.DefaultBuildManager.EndBuild();   
        // If the build failed, return an error string.    
        if (submission.BuildResult.OverallResult == BuildResultCode.Failure)      
        {                 //do some error task           
        } 
    }
于 2012-08-12T10:59:14.240 に答える