我需要以编程方式为.csproj构建一个项目,我正在创建.在搜索Google时,我找到了MS为MSBuild Engine提供的类和API.有了这些信息,我创建了一个执行msbuild.exe然后读取输出的进程,但现在我想使用命名空间Microsoft.Build.Execution来构建项目.这是我的计划:
public class Compiler
{
private static string locationOfMSBuilldEXE = "";
public static void Build(string msbuildFileName)
{
BuildManager manager = BuildManager.DefaultBuildManager;
ProjectInstance projectInstance = new ProjectInstance(msbuildFileName);
var result = manager.Build(new BuildParameters()
{
DetailedSummary = true
},
new BuildRequestData(projectInstance, new string[] { "Build" }));
var buildResult = result.ResultsByTarget["Build"];
var buildResultItems = buildResult.Items;
string s = "";
}
}
Run Code Online (Sandbox Code Playgroud)
结果表明这很好,但我需要知道编译的详细输出以及如何查看它.如果有人可以给我链接到MSBuild的好教程或书籍,那将会非常有用.
Par*_*rma 15
谢谢@ritchmelton.虽然我自己弄清楚了.这是我的代码:我使用了一个内置的记录器ConsoleLogger
public class Compiler
{
private static string locationOfMSBuilldEXE = "";
public static void Build(string msbuildFileName)
{
ConsoleLogger logger = new ConsoleLogger(LoggerVerbosity.Normal);
BuildManager manager = BuildManager.DefaultBuildManager;
ProjectInstance projectInstance = new ProjectInstance(msbuildFileName);
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;
string s = "";
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您只想构建项目或解决方案,而无需精心设计的参数,则可以更简单地完成.伪代码:
using namespace Microsoft.Build.Evaluation;
var p = Project.Load("path to project");
p.SetGlobalProperty("Configuration", "Release");
p.Build(...);
Run Code Online (Sandbox Code Playgroud)
而已!BuildParameters等适用于相当高级的场景.Visual Studio本身使用它们.
丹(msbuild开发)