使用MSBuild.exe进行增量构建

7
我正在通过Python调用subprocess构建Visual Studio 2010解决方案。当直接从命令行调用时,devenv.com需要大约15秒才能启动。但是当从Python调用时,这个时间跳到了大约1.5分钟。
自然地,我希望从我们的构建中删除这段死时间。因此,我决定测试一下MSBuild.exe(来自.NET 4)。看起来MSBuild.exe可以立即运行。但是...它似乎每次都进行完整的构建,而不是增量构建。
我使用的命令是:
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "C:\path\to\my\project.sln" /target:build /maxcpucount:8 /property:Configuration=Release

看起来这个应该支持增量编译。但我在网上看到过一些帖子表明,msbuild可能无法像这样支持增量编译。

这是可能的吗?如果是,那我做错了什么?

更新:

我已经进一步阅读了这个问题。根据

http://msdn.microsoft.com/en-us/library/ms171483.aspx

并且

http://www.digitallycreated.net/Blog/67/incremental-builds-in-msbuild-and-how-to-avoid-breaking-them

看起来我需要在我的.vcxproj文件中设置输入和输出属性。检查我的文件,这些确实缺失了。
它们会在什么时候生成?我的大多数.vcxproj文件都是从Visual Studio 2008转换而来的。但我也生成了一个新项目,其中也缺少了输入和输出属性。
VS2010不创建具有这些属性的项目吗?
更新:我们已经升级到VS 2013。现在msbuild支持增量构建。从未找到VS 2010问题的根本原因。

1
你在哪里看到 MSBuild 不支持增量构建的信息?能否发布 URL 或指针以找到它? - seva titov
这是我找到的帖子。https://social.msdn.microsoft.com/Forums/vstudio/en-US/8123dce6-7177-4fd7-b59c-51ef1359e60d/msbuild-task-is-not-incremental。让我认为不支持增量构建的关键点是“既没有作为系统的MsBuild,也没有作为任务的MSBuild提供了一种知道正在构建的.sln的输入和输出的方法。”但我不清楚这个说法有多准确。因此提出这个问题。 - Shane Gannon
@vel 八年过去了,自从我提出这个问题。我对C++构建不再熟练,需要重新学习才能帮助你。 - Shane Gannon
1个回答

2
我认为增量构建不受支持的说法是错误的,根据官方消息Managed Incremental Build,这个功能已经被包含在VS2010 SP1中。
我们首次在VS2008中引入了托管的增量构建功能。在VS2010中,由于构建系统转移到了MSBuild,我们无法重新实现托管的增量构建功能。我们收到了客户强烈的要求,因此我们重新实现了这个功能,并将其包含在VS2010 SP1中。 我在网上找到的其他解决方案 - 项目应该已经可以增量构建(只需确保使用“生成”而不是“重新生成”)。检查增量构建是否有效的最佳方法是从命令行运行构建。第二次构建应该几乎不需要时间。 如果仍然重建,那么可能您已经以某种方式修改了项目,影响了构建顺序。通过/v选项查看构建日志可以帮助您确定问题所在。 - 导致增量构建出现问题的另一个原因是GenerateResource.TrackFileAccess Property 此API支持.NET框架基础结构,不应直接从代码中使用。获取或设置一个开关,指定是否应该跟踪文件访问模式。

1
啊哈……这就说得通了。我没有安装服务包1。将这个功能从最初的版本中删除是多么不寻常啊。 - Shane Gannon
@ShaneGannon 同意 :) ! - Heisenberg
@Heisenberg,你能不能帮我解决一个类似的问题?非常感谢!https://stackoverflow.com/questions/76532983/msbuild-incremental-build-for-dll - vel

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