在C#应用程序中使用MSBuild构建C ++解决方案

时间:2016-04-19 21:04:00

标签: c# .net msbuild visual-studio-2015

我目前正在尝试使用Microsoft.Build.Execution.BuildManager在C#winForms应用程序中构建C ++解决方案。

我从其他帖子中得到了以下代码,它使用了Logger,所以我可以看到一些输出。尝试构建C ++应用程序时,BuildSubmission.BuildResult.OverallResult总是失败。

string projectFileName = "mySolution.sln";
ProjectCollection pc = new ProjectCollection();
Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Configuration", "Release");
GlobalProperty.Add("Platform", "Win32");

BuildParameters bp = new BuildParameters(pc);
bp.Loggers = new[] {
                      new ConsoleLogger
                      {
                        Verbosity = LoggerVerbosity.Minimal,
                        ShowSummary = true,
                        SkipProjectStartedText = true
                      }
                    };

BuildManager.DefaultBuildManager.BeginBuild(bp);
BuildRequestData BuildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Clean" }, null);

BuildSubmission BuildSubmission = BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest);
BuildSubmission.Execute();
BuildManager.DefaultBuildManager.EndBuild();

if (BuildSubmission.BuildResult.OverallResult == BuildResultCode.Failure)
{
    throw new Exception();
}

当我运行此代码时,我得到以下输出:

  

C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Microsoft.CppClean.targets(76,5):错误MSB4127:无法从程序集中实例化“CppClean”任务“C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Microsoft.Build.CppTasks.Common.dll”。请验证是否使用与计算机上安装的Microsoft.Build.Framework程序集相同的Microsoft.Build.Framework程序集版本构建了任务程序集,并确保主机应用程序没有缺少Microsoft.Build.Framework的绑定重定向。无法将“Microsoft.Build.CPPTasks.CPPClean”类型的对象强制转换为“Microsoft.Build.Framework.ITask”。

     

C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Microsoft.CppClean.targets(76,5):错误MSB4060:“CppClean”任务已声明或使用不正确,或在施工期间失败。检查任务名称和程序集名称的拼写。

任何人都可以解释为什么我收到此消息是如何解决它的?

PS。我更喜欢使用更新c#代码中的对象/变量的解决方案,或者将c ++解决方案中的设置更新为涉及手动更新MSBuild或Visual Studio文件的解决方案。我在一个有多个开发人员的环境中工作,我宁愿不必将这些更改传播给团队中的每个人,以便该应用程序为他们工作。

0 个答案:

没有答案