通过代码运行的MSBuild并获得异步进度
问题描述:
我想通过代码运行的MSBuild,并获得建造的异步状态,因为它的进展(类似于TeamCity的或任何其他构建亚军一样)。通过代码运行的MSBuild并获得异步进度
我使用下面的代码:
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任务?
答
你必须调用建立asyncronously和在一个循环中,你可以让你的进度跟踪测试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
}
}
我实际上是在考虑设置一个MSBUILD日志提供程序,并观察它的构建完成消息吗? – Doug 2012-10-23 10:16:09
我会说这绝对是正确的答案 – OrPaz 2014-02-24 15:00:33