我目前正在尝试使用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文件的解决方案。我在一个有多个开发人员的环境中工作,我宁愿不必将这些更改传播给团队中的每个人,以便该应用程序为他们工作。