使用Microsoft.Build以编程方式构建项目失败

时间:2018-02-26 10:41:30

标签: c# .net microsoft.build

我将以下三个软件包安装到我的控制台应用程序中:

Microsoft.Build
Microsoft.Build.Framework
Microsoft.Build.Tasks.Core
Microsoft.Build.Utilities.Core

我尝试使用以下方法构建项目:

        static void Build(string projectPath)
        {
            var logger = new ConsoleLogger(LoggerVerbosity.Normal);
            logger.ShowSummary = true;
            var manager = BuildManager.DefaultBuildManager;

            var projectInstance = new ProjectInstance(projectPath);
            var result = manager.Build(
                new BuildParameters()
                {
                    DetailedSummary = true,
                    Loggers = new List<ILogger>() { logger }
                },
                new BuildRequestData(projectInstance, new string[] { "Build" }));
            var buildResult = result.ResultsByTarget["Build"];
            var buildResultItems = buildResult.Items;
        }

然而,在我运行代码后,我收到了下图中描述的错误:

enter image description here

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:0)

我认为你没有使用正确的MSBuild版本。尝试在.proj中明确设置变量:

<MSBuildExtensionsPath>C:\Program Files (x86)\MSBuild</MSBuildExtensionsPath>

答案 1 :(得分:0)

似乎最好的解决方案是在SimpleDateFormat("d/M/yyyy")类中使用MSBuild命令行。工作样本如下:

Process

然后您可以使用输出来确定构建是否成功。重要的一点是,您必须找到 var buildOutput = new List<string>(); var buildError = new List<string>(); var buildProcess = new Process { StartInfo = new ProcessStartInfo { FileName = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\MSBuild\\15.0\\Bin\\MSBuild.exe", Arguments = projectPath + " /t:Rebuild /p:Configuration=Debug", UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true } }; buildProcess.Start(); while (!buildProcess.StandardOutput.EndOfStream) { buildOutput.Add(buildProcess.StandardOutput.ReadLine()); } while (!buildProcess.StandardError.EndOfStream) { buildError.Add(buildProcess.StandardError.ReadLine()); } 文件的正确路径,因为此文件有多个版本,在我的情况下(VS 2017),正确的路径是示例代码中的路径。