问题标签 [incremental-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7013 浏览

msbuild - Visual Studio 2012 - MSBuild 增量构建未检测到更改

我已经自定义了一个 MSBuild 项目,因此默认目标是一个类似于“BuildWithExternalReference”的新目标。这个新目标调用了另外两个目标;第一个是一个名为“BuildExternalReference”的自定义目标,它使用外部工具构建 DLL。构建的 DLL 是对主项目的引用,它是使用普通的“构建”目标构建的。我已经为“BuildExternalReference”目标设置了输入和输出属性,因此输入引用源文件,输出引用生成的 DLL。

在 Visual Studio 2012 和 Visual Studio 2010 中,构建在第一次被调用时可以正常工作。但是,在后续构建中,如果我更改外部源文件(由“BuildExternalReference”目标输入属性引用),那么 Visual Studio 2012 只会报告“构建:0 成功,0 失败,1 最新,0 跳过”。Visual Studio 2010 继续完美运行。此外,使用 MSBuild.exe 从命令行构建可以完美运行。

我知道 Visual Studio 2012 中的构建系统已更改,但我找不到有关更改执行增量构建方式的信息。

Visual Studio 2012 中是否有任何更改导致增量构建发生更改?

这是我正在使用的 csproj 文件的精简版本:

2012 年 11 月 1 日更新

这是一个完整的自包含示例,它重现了该问题:

https://skydrive.live.com/redir?resid=EA1DD6ACA92F9EFF!155&authkey=!ANhuqF_rrCgxpLE

这是一个项目的解决方案。MSBuildIssueExample\MSBuildIssueExample.csproj 文件已自定义,因此有一个自定义默认目标。此默认目标调用自定义目标(称为“ExternalTool”),然后调用默认构建目标。

自定义 ExternalTool 目标写出一些消息以确保其正常工作,并且还将 MSBuildIssueExample\ExternalTool\Input.txt 文件的内容复制到 MSBuildIssueExample\ExternalTool\Output.txt 文件上。

Input.txt 文件是 ExternalTool 目标的输入,Output.txt 是输出。

要重新创建问题,请执行以下步骤:

1)在指定版本的Visual Studio中打开解决方案

2) 构建一次解决方案,以确保输出相对于输入是最新的

3) 修改 MSBuildIssueExample\ExternalTool\Input.txt 使其内容与 Output.txt 不匹配

4) 再次构建

当您在 Visual Studio 2010 中完成此过程时,将再次调用 ExternalTool 目标,并且 Input.txt 文件将被复制到 Output.txt 上。

在 Visual Studio 2012 中执行此过程时,不会调用 ExternalTool 目标,即使输入比输出新,因此 Input.txt 的内容不会写入 Output.txt。

但是,如果您执行 Rebuild(而不仅仅是 Build),那么 Visual Studio 的两个版本都可以按预期工作。

0 投票
2 回答
1393 浏览

findbugs - 检查增量构建中的样式、PMD、FindBugs

我计划逐步对我的项目运行检查样式。目前我的 CI 服务器正在进行增量构建,即仅对修改的文件和依赖项运行单元测试。但是对于检查样式、PMD、Findbugs,我们在整个项目上运行,而不是只在修改过的文件上运行。

我需要在整个项目上运行这些静态分析工具以进行第一次构建,然后每次增量构建仅在修改后的文件集上运行。并合并修改文件的结果以完成结果,这样我就可以知道工具验证是否重要。

是否有任何蚂蚁任务可用于上述要求?

0 投票
2 回答
976 浏览

variables - 创建一个带有增量数字的 txt 文件

抱歉这个问题我是编程的初学者,对于知道该怎么做的人来说,这可能很容易:

我需要在一个 txt 文件中创建一系列带有递增数字的链接,例如我想保持某个部分“固定”而某个部分必须更改;例如想象一下:

http://user:password@website.com/members/sets/001/somethingfixed-001.zip 在文本中以下几行应该是:

http://user:password@website.com/members/sets/002/somethingfixed-002.zip 等。

我认为必须有一种方法来生成我可以指定的那些,创建链接,保持每行中的固定部分相等,然后逐步放置 001、002、003,直到我需要它为止。

如果我可以创建一个 .bat 文件来询问我:初始链接是什么,要修复的部分是什么以及要更改的内容是什么,那就太棒了。

我会做这样的程序:

插入第一个链接,然后我粘贴它。

然后它问我固定部分是什么,我输入:.../members/sets/X/somethingfixed-Y.zip

变量 X 和 Y 的范围是多少?起始号码?然后我输入 001 然后它问我最后的数字是多少?我放了 150,它会在 txt 文件中生成链接,以便我可以使用它们。

希望很清楚。

干杯

0 投票
0 回答
517 浏览

msbuild - MSBuild:增量构建问题

我有与部分构建有关的问题。场景如下。

我有包含 Windows 窗体应用程序项目及其支持类库项目的解决方案。我正在使用 MSBuild 构建解决方案。在构建之前,我使用 msbuild 自定义任务更改每个项目的程序集文件版本。这会导致 AssemblyInfo 文件被修改。由于 assemblyinfo 文件已修改,因此 msbuild 会构建每个项目,即使除了 assemblyInfo 文件中的更改之外没有真正的代码更改。因此,每次我构建解决方案时,它都会构建所有项目,在理想情况下,它应该只构建那些发生真正代码更改的项目。由于这个解决方案的构建时间保持不变,即使单个项目发生了变化。这还有另一个副作用。我正在使用 clickonce 发布此应用程序。因此,每次构建解决方案时,它都会构建解决方案中的每个项目。这会导致每次我进行新构建时都会为清单文件中的每个程序集/exe 生成新的哈希签名。因此,当发布应用程序更新时,clickonce 会强制用户下载应用程序中的每个 dll/exe。而理想情况下,应该只在用户系统上下载更新的(可能是一个或两个)文件。

基本上我想要的是。1. 只编译那些修改过的项目。2. 只为修改过的项目更新汇编文件版本。

这样,我将能够减少构建时间并解决 clickonce 问题。有什么解决方案/解决方法吗?

0 投票
2 回答
2066 浏览

eclipse - GNU Make Incremental Build:强制重建特定文件

我在 Windows 7 上使用 Eclipse (Juno) + CDT 来驱动 GCC,并自动生成生成文件。在我使用 GCC__DATE____TIME__预处理器宏在我的项目配置头文件中添加构建日期/时间戳之前工作得很好。

在干净的构建中,这些宏工作得很好——但在增量构建中,Make 不会重新构建关联的目标文件;它只是直接跳转到链接。

我尝试将 Windows 等效touch为预构建步骤(此处描述:https ://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command ),但 Make 仍然跳过该文件。还尝试“触摸”包含标题的源文件;仍然没有骰子。

我如何告诉 Make 始终重建依赖于特定标头的任何文件,即使是增量构建?

0 投票
1 回答
377 浏览

msbuild - 过滤 Msbuild CreateItem 的输出以进行 StyleCop 增量检查

我正在尝试修改 stylecop 目标以支持仅对已更改的文件进行增量检查。

调试时,我看到@(Compile) 是要检查的文件列表;但是,我想将此列表过滤为仅已更改的文件(即那些时间戳晚于目标 dll 的文件,我知道我可以将其引用为 $(TargetPath) )。

您如何递归该 createitem 的输出“StyleCopFiles”并删除那些未更改的文件?

下面是目标,我想将过滤条件添加到:

0 投票
0 回答
358 浏览

visual-c++ - 使用 MsBuild 构建多个配置时如何仅构建修改后的项目

我有一个构建多个项目的解决方案。其中一些项目会生成 DLL,以便在其他开发团队中重新分发(用于集成)。这些相同的 DLL 由我们自己的应用程序使用,它们主要是为了维护该应用程序而修改和更新的。我们遇到了一个问题,有时会在我们提供给第三方的 DLL 中添加不需要的依赖项。因此,我们在 Visual Studio 解决方案中创建了一个新配置,该配置仅构建我们提供给第三方的 DLL。通过构建此配置,我们能够确保如果为这些项目添加任何新依赖项,我们的门控签入将失败。

“Database Providers Release”配置在项目的“Release”配置中构建每个所需的项目。

因为第一次调用 MsBuild 会在 Release 配置中构建单个项目,而完整构建也会在 Release 配置中构建单个项目,所以我们认为“Build”目标会检测到构建输出是最新的并且会跳过重建当我们对 MsBuild 执行第二次调用时,这些项目是第二次。但是,MsBuild 脚本将始终在第二次调用 MsBuild 任务时重建项目。这增加了我们的构建时间并影响了我们构建的代码指标(例如,构建警告的数量增加了,因为相同的警告被报告了两次)。

如果我只是将解决方案作为一个整体调用两次(在解决方案级别使用相同的构建配置),MsBuild 将正确跳过所有解决方案项目(即它执行项目的增量构建)。例如:

如果我直接在 Visual Studio 中运行 2 种不同的构建配置,它将正确检测到已经构建了各种项目,并且将跳过第二次重新构建它们(即 vcxprojs 的增量构建设置是正确的。)

有没有办法使用 MsBuild 构建 2 个解决方案配置(其中每个解决方案配置都使用相同的项目配置)并让 MsBuild 在第 2 个构建中遇到它们时跳过第一个构建中已经构建的项目?

0 投票
1 回答
1303 浏览

visual-studio - Visual Studio 总是重新编译代码,即使它没有改变

在对我的项目进行一些更改后,Visual Studio 开始总是重新编译所有源代码,导致所有依赖项目也重新编译,从而大大减慢了开发速度。这是为什么?

  • 仅在XML documentation file选中并且有一些带有Copy always. 如果您更改其中任何一个,则不会重新编译源代码。
  • 仅在 Visual Studio 中编译时发生 - 从命令行使用编译时MSBuild,不会重新编译源代码。
  • Visual Studio 2012 更新 4。
0 投票
2 回答
2436 浏览

visual-studio-2010 - 如何永久停止 Visual Studio 的增量构建?

我知道该属性,但如果我想停止增量构建,/incremental每次都需要更改它。NO有什么办法可以永久阻止所有项目。

0 投票
0 回答
495 浏览

gradle - 如何清理自定义增量构建?

我正在努力实现以下目标 -

  1. 通过源文件目录递归运行
  2. 如果至少修改了一个文件,则执行编译

为了实现这一点,我做了以下事情:

  • 这是诀窍,我的问题是,我怎样才能强制它重新编译?
  • 我可以使自定义增量构建不是最新的吗?
  • 例如 cleanMyCompile 任务不是自动生成的,我怎样才能生成它或者我可以手动创建它?

预先感谢