c# - 如何在 C# 中以编程方式构建解决方案?

如何以编程方式构建 C# 解决方案?

我应该能够传递解决方案的路径并获取输出消息(或者只是构建解决方案)。如何在 C# 中实现这一点?

我需要这个,因为我们正在为我们的项目构建一个单一的解决方案,它现在从 SVN 获取所有内容并构建它。接下来是一键部署。

最佳答案

.NET 4.0 MSBuild API introduction 使用 .NET 4.0 MSBuild API 的示例:

List<ILogger> loggers = new List<ILogger>();
loggers.Add(new ConsoleLogger());
var projectCollection = new ProjectCollection();
projectCollection.RegisterLoggers(loggers);
var project = projectCollection.LoadProject(buildFileUri); // Needs a reference to System.Xml
try
{
    project.Build();
}
finally
{
    projectCollection.UnregisterAllLoggers();
}

一个更简单的例子:

var project = new Project(buildFileUri, null, "4.0");
var ok = project.Build(); // Or project.Build(targets, loggers)
return ok;

记得使用 .NET 4 配置文件(不是 客户端配置文件)。

添加以下引用:System.XML、Microsoft.Build、M​​icrosoft.Build.Framework 和可选的 Microsoft.Build.Utilities.v4.0。

另请查看 Stack Overflow 问题 Running MSBuild programmatically .

要构建解决方案,请执行以下操作:

var props = new Dictionary<string, string>();
props["Configuration"] = "Release";
var request = new BuildRequestData(buildFileUri, props, null, new string[] { "Build" }, null);
var parms = new BuildParameters();
// parms.Loggers = ...;

var result = BuildManager.DefaultBuildManager.Build(parms, request);
return result.OverallResult == BuildResultCode.Success;

https://stackoverflow.com/questions/6511380/

相关文章:

build - 将 Common Lisp 编译为可执行文件

visual-studio - Visual Studio 有 'ccache' 吗?

docker - Docker 构建上下文的目的是什么?

build - "fatal error U1087: cannot have : and::dep

build - 寻找真实世界的 Gradle 示例

build - 将 TeamCity 构建配置从一台服务器导入/导出到另一台服务器

java - Maven 构建只更改了文件

maven-2 - 在 Maven 中,我可以在当前项目上方指定相对路径吗?

java - Java项目中的build.xml

maven - 如何使用 Gulp、Maven 和 Jenkins 组织完整的构建管道,一直到集成测