我在我的控制台应用程序中安装了以下三个包:
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;
}但是,在运行代码之后,我得到了在以下图像中描述的错误:

为什么会发生这种事,我该怎么解决呢?
发布于 2018-03-01 10:15:10
最好的解决方案似乎是在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());
}然后,您可以使用输出来确定构建是否成功。重要的是,您必须找到MSBuild.exe文件的正确路径,因为这个文件有几个版本,在我的例子(VS 2017)中,正确的路径是示例代码中的路径。
发布于 2018-02-26 10:51:22
我认为你没有使用正确的MSBuild版本。尝试在.proj中显式设置变量:
<MSBuildExtensionsPath>C:\Program Files (x86)\MSBuild</MSBuildExtensionsPath>发布于 2018-02-27 06:37:10
一个BuildRequestData构造函数重载支持一个名为"toolVersion“的参数。由于您使用的是2017,所以将其设置为"15.0“。
编辑:i使用.Net框架提供的MSBuild版本(位于此处的版本)退出:System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
C:\Windows\Microsoft.NET\Framework\v4.0.30319
相反,我使用的是这里的一个:
C:\程序文件(x86)\MSBuild{version}\Bin
此版本提供额外的参数,如LangVersion或DeployOnBuild。
https://stackoverflow.com/questions/48986544
复制相似问题