2012-03-13 84 views
4

我有一堆从互联网上下载的解决方案(codeplex等),我想构建它们并在DLL上运行一个工具。我想通过自动化来做到这一点。如何使用MsBuild API 4.0自动构建解决方案?

建议使用MSBuild API,因为它可以很容易地获取错误信息并操作MsBuild以获取其他信息。不幸的是它很难记录如此:

  1. 如何建立.sln文件(通过MSBuild API 4.0)?
  2. 如何捕获错误信息? (我看到了一个关于如何将日志输出到控制台的例子,但没有找到文件的优惠码)

谢谢!

回答

4

我发现,提供了解决方案上的计算器一个相关的问题:

running msbuild programmatically

接受的答案提供了良好的资源:

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/ec95c513-f972-45ad-b108-5fcfd27f39bc/ 记录建立与MSBuild的4.0的消息: http://www.go4answers.com/Example/building-solution-programatically-vs-5395.aspx

此外,msdn上有一个日志使用示例:http://msdn.microsoft.com/en-us/library/microsoft.build.framework.ilogger.aspx

3

也许我失去了一些东西,但为什么它必须是MSBuild API这样一个简单的任务?

刚刚从你写的什么的问题,我认为没有必要使用API​​只是建立一个解决方案,并捕获在一个文本文件的输出。
您可以使用MSBuild命令行工具。

建设有MSBuild的一个解决方案是如此简单:

%windir%\Microsoft.net\Framework\v4.0.30319\msbuild.exe MySolution.sln 

capture the output in a text file,你只需要补充一点:
(例如,从链接复制)

/l:FileLogger,Microsoft.Build;logfile=MyLog.log 

所以最后的声明看起来像这样:

%windir%\Microsoft.net\Framework\v4.0.30319\msbuild.exe MySolution.sln /l:FileLogger,Microsoft.Build;logfile=MyLog.log 

这将构建解决方案并将MSBuild的输出保存在当前目录中名为MyLog.log的文本文件中。

+0

不够公平,我知道如何通过运行命令行来实现,但为了自动化目的,使用MSBuild API将提供更多的控制 - 例如,我打算稍后注入一些任务。 – 2012-03-14 08:51:24

+0

@Christian Specht - 因为任何东西都向控制台投掷是一种额外的复杂性,可以避免。 – StingyJack 2017-07-03 16:37:32

1

你所描述的任何东西都不需要使用MSBuild API。如果要扩展自定义构建任务的构建过程,使用MS构建API是值得的,但如果您只是想自动构建构建,则无用。该API有很好的文档记录。这里有一个像MSDN文档。 MSBuild API

要直接回答您的问题: 1)MSBuild不理解解决方案文件。这些是视觉工作室的概念。如果从命令行构建,MSBuild将“运行”一个解决方案文件,但它通过从解决方案文件生成一个msbuild文件来完成。通过直接运行顶层项目文件可以获得相同的效果。

2)正如我的基督徒所说,你可以用记录器来做到这一点。这里的文档:Build Logger

如果你想你的自动化构建,使用建立构建自动化环境像詹金斯或TeamCity的。

相关问题