如何使用MsBuild API 4.0自动构建解决方案?

5
我有很多从网络上(codeplex等)下载的解决方案,我想构建它们并在DLL上运行一个工具。我想通过自动化实现这一点。
建议使用MSBuild API,因为它可以轻松获取错误信息,并进一步操作MsBuild以获得其他信息。不幸的是,它几乎没有文档,因此:
1. 如何通过MSBuild API 4.0构建.sln文件? 2. 如何捕获错误信息?(我看到了一个关于如何将日志输出到控制台的示例,但没有找到适用于文件的东西)
谢谢!
3个回答

4
我在stackoverflow找到一个相关的问题,提供了解决方案:running msbuild programmatically
被采纳的答案提供了很好的资源:
- Logging Build messages with MSBuild 4.0:http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/ec95c513-f972-45ad-b108-5fcfd27f39bc/ - 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

要在文本文件中捕获输出结果,只需要添加以下内容:
(示例来自链接)
/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的文本文件中,位于当前目录。

好的,我知道可以通过运行命令行来完成它,但是为了自动化目的,使用MSBuild API将提供更多的控制 - 我计划稍后注入一些任务。 - Bogdan Gavril MSFT
@Christian Specht - 因为对控制台的任何外壳都是可以避免的额外复杂性。 - StingyJack

1

你所描述的内容并不需要使用MSBuild API。如果你想要扩展自定义构建任务的构建过程,使用MS Build API是值得的,但如果你只是想要自动化你的构建,它就没有用处了。该API有非常完善的文档。这里是MSDN文档的链接:MSBuild API

直接回答你的问题: 1)MSBuild不理解解决方案文件。那些是Visual Studio的概念。如果从命令行构建,MSBuild会“运行”解决方案文件,但它是通过从解决方案文件生成msbuild文件来实现的。你可以直接运行你的顶级项目文件来获得相同的效果。

2)正如Christian所提到的,你可以使用记录器来完成。这里是文档:Build Logger

如果你想要自动化你的构建,请使用已经建立的构建自动化环境,比如Jenkins或TeamCity。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接