如何配置VS以仅编译已更改的代码

时间:2011-03-23 09:05:28

标签: c# visual-studio compilation

我有非常大的解决方案,每次我要调试时都会进行编译 所以我知道我可以在解决方案配置中禁用所有项目的构建,但有没有办法说Visual Studion只编译更改的代码?
我确定是的。

谢谢你。

5 个答案:

答案 0 :(得分:9)

正如Marnix和Anton已经说过这就是VS通常做的事情。但是,如果您的解决方案中有很多项目彼此依赖,并且您对所有或大多数其他项目将使用的组件进行更改,则必须再次构建其他项目,以确保一切按预期工作

更新

因此,即使您没有进行任何更改,它也会开始重新编译,我们需要了解VS如何尝试找出它在增量构建中需要做什么。

为此,它只检查每个文件的日期时间以及是否有任何更改。如果是,重新编译该文件及其所有依赖项(例如stdafx.h中的更改将导致完全重建,因此通常每个源文件都将引用此文件)。

但这种行为也有例外。例如,安装项目将始终重建,即使没有进行任何更改(由于这一事实,我通常会从构建过程中排除安装项目,并且只在需要时手动启动它)。

因此,如果您只拥有通常支持增量构建的C / C ++,C#,VB等项目,那么即使您不进行任何更改,也必须在两个构建之间进行更改。

以下是一些可能性:

  • 用于更改源文件的pre或post构建命令
    • 这可能是自动更新,将您的repo中的修订号添加到AssemblyInfo文件的资源中。
    • 或者在目录结构中进行一些更改的复制/删除命令(我使用这一次来删除预构建命令中的输出目录以强制在每次构建时进行重建)。
  • 装配版本的自动增量器
    • 可能通过使用[assembly: AssemblyVersion("1.0.*")]或其他一些外部流程来增加内部版本号

如果上述步骤之一发生在您所有或大多数其他项目所依赖的模块上,那么所有内容都需要重建。

答案 1 :(得分:2)

如果你进行Build(而不是Rebuild),Visual Studio实际上就可以开箱即用。但是,它会比其他项目更好地处理某些项目类型。例如,将始终构建设置或部署项目。

您可以卸载任何不需要加速构建的项目。

此外,我发现无需调试即可启动应用程序并在应用程序运行后附加调试器。据我所知,这可以最大限度地减少正在加载的调试符号的数量,直到正在运行的应用程序正在使用的内容。

据我所知,MSBuild(VS使用的构建引擎)将根据已更改的文件自动检测要重建的内容。 因此,请确保您没有使用每个构建更新的任何生成的文件。例如,使用源控件元数据更新(程序集)版本时。任何更改的文件都将触发使用它的所有项目的构建以及依赖它们的所有项目。像这样的设置每次都会有效地重建大部分应用程序。

答案 2 :(得分:1)

1 /以详细模式检查构建日志(工具->选项->项目和解决方案->生成并运行)。

2 /在可能的错误中,可能存在导致问题的“本地复制”模式下的dll,如果是这种情况,请转到项目引用,找到该dll并将“本地复制”值设置为false

[我在这里找到了这些解决方案] https://oz-code.com/blog/net-c-tips/visual-studio-keeps-rebuilding-projects-no-good-reason

答案 3 :(得分:0)

答案 4 :(得分:0)

我将添加此内容,因为没有人提及它 - 如果您的解决方案中有安装程序项目,那么每次重建或运行程序时都会重建该项目,即使没有其他项目发生更改。由于构建安装程序项目可能需要花费大量时间(我的机器上约45秒,对于我的中型项目),这是一个问题。

要解决此问题,只需进入配置管理器(右键单击解决方案 - >属性 - >配置属性),并在调试模式下取消选中“构建”安装程序项目。