【问题标题】:Incremental Build with MSBuild.exe使用 MSBuild.exe 进行增量构建
【发布时间】:2015-01-02 02:05:12
【问题描述】:

我正在通过 Python 构建一个 Visual Studio 2010 解决方案,并调用 subprocess。当直接从命令行调用时,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 问题。

【问题讨论】:

  • 您从哪里看到MSBuild 不支持增量构建的信息?你能发布网址或指针如何找到它吗?
  • 这是我找到的帖子。 social.msdn.microsoft.com/Forums/vstudio/en-US/…。让我认为不支持增量构建的观点是“MsBuild 作为一个系统,MSBuild 作为一项任务都没有提供了解有关正在构建的 .sln 的输入和输出的方法。”。但我不清楚这种说法有多准确。因此提出了这个问题。

标签: command-line msbuild incremental-build


【解决方案1】:

我认为不支持增量构建的事实是根据官方消息来源的错误声明,Managed Incremental Build 此功能已包含在 VS2010 SP1 中

我们首先在 VS2008 中引入了托管增量构建功能。 在 VS2010 中,我们无法重新实现托管增量 将构建系统移至 MSBuild 的构建功能。我们收到了 客户对此功能的强烈要求。结果,我们 重新实现了这个特性,它包含在 VS2010 SP1 中。

我在网上找到的其他解决方案

  • 项目应该已经逐步构建(只要确保您 做构建而不是重建)。检查是否增量的最佳方法 构建工程是从命令行运行构建。第二 构建它几乎不需要时间。

    如果事情仍在重建,那么也许你已经修改了 您的项目以某种方式弄乱了构建顺序。 查看构建日志(通过 /v 选项)可以帮助您指出 发生了什么事。

  • 可能导致增量构建出现问题的其他原因是GenerateResource.TrackFileAccess Property此 API 支持 .NET Framework 基础结构,不能直接从您的代码中使用。 获取或设置一个开关,该开关指定我们是否应该跟踪文件访问模式。

【讨论】:

  • 啊啊啊....有道理。我没有 Service Pack 1。在初始版本中遗漏了多么不寻常的功能。
  • @ShaneGannon 同意 :) !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2016-12-27
  • 2012-08-15
  • 1970-01-01
  • 2013-07-04
相关资源
最近更新 更多