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

amrnrhlw  于 2023-05-18  发布在  其他
关注(0)|答案(6)|浏览(524)

我有一个很大的解决方案,每次我特灵着调试的时候它都在编译。
所以我知道我可以在解决方案配置中完全禁用所有项目的构建,但是有没有办法让Visual Studion只编译更改的代码?
我相信是的。
谢谢你提前。

9ceoxa92

9ceoxa921#

正如Marnix和Anton所说,这是VS通常做的。但是,如果你的解决方案中有很多相互依赖的项目,并且你对一个组件进行了更改,而这个组件将被所有或大部分其他项目使用,那么它必须再次构建其他组件,以确保一切都按预期运行。

更新

因此,如果它开始重新编译,即使你没有做任何更改,我们需要找出VS如何尝试找出它需要做的增量构建。
为此,它只检查每个文件的日期时间,以及是否有任何更改。如果是,重新编译该文件及其所有依赖项(例如stdafx.h中的更改将导致完整的重建,因为通常每个源文件都会引用这个文件)。
但这种行为也有例外。例如,安装项目总是会重新构建,即使没有进行任何更改(由于这个事实,我通常将安装项目从构建过程中排除,并仅在需要时手动启动它)。
所以如果你只有C/C++,C#,VB等。在通常支持增量构建的项目中,在两个构建之间必须有一些更改,即使您没有更改任何内容。
以下是一些可能性:

  • 对源文件进行更改的预生成或后生成命令
  • 这可能是一种自动更新,即从您的仓库中添加修订号到AssemblyInfo文件的资源中。
  • 或者一个拷贝/删除命令,它在目录结构中做一些改变(我曾经用这个命令在预构建命令中删除输出目录,以强制在每次构建时进行重建)。
  • 程序集版本的自动递增器
  • 可能通过使用[assembly: AssemblyVersion("1.0.*")]或其他一些外部进程来增加构建数

如果上面的一个步骤发生在一个模块上,而你的所有或大部分其他项目都依赖于这个模块,那么一切都需要重新构建。

jhiyze9q

jhiyze9q2#

Visual Studio实际上是开箱即用的,如果您执行Build(而不是Rebuild)。但是,它会比其他人更好地处理某些项目类型。例如,将始终生成安装或部署项目。
您可以卸载任何不需要加速构建的项目。
此外,我发现在不调试的情况下启动应用程序并在应用程序运行后附加调试器的方法效果很好。据我所知,这将最小化加载到运行应用程序实际使用的调试符号的数量。
据我所知,MSBuild(VS使用的构建引擎)将根据哪些文件被更改来自动检测要重建的内容。因此,请确保没有任何生成的文件会随着每个构建而更新。例如,当您使用源代码管理 meta数据更新(程序集)版本时。任何更改的文件都将触发使用该文件的所有项目以及依赖于它们的所有项目的生成。这样的设置每次都能有效地重建大部分应用程序。

j9per5c4

j9per5c43#

1/在详细模式下检查构建日志(Tools -> Options -> Projects and Solutions -> Build and Run)。
2/在可能的错误中,可能有一个dll在“copy local”模式下导致问题,如果是这种情况,转到项目引用,找到dll并将“copy local”值设置为false。
[我在这里找到了这些解决方案] https://oz-code.com/blog/net-c-tips/visual-studio-keeps-rebuilding-projects-no-good-reason

jtoj6r0c

jtoj6r0c5#

我将添加这一点,因为没有人提到它-如果您的解决方案中有一个安装程序项目,则该项目将在您每次重建或运行程序时重建,即使其他项目没有更改。由于构建安装程序项目可能需要大量的时间 (对于我的中型项目,在我的机器上大约需要45秒),这是一个问题。
要解决这个问题,只需进入配置管理器(右键单击solution-->properties-->configuration properties),在调试模式下取消选中“build”安装程序项目。

x3naxklr

x3naxklr6#

这是2023年的一个问题...
如果您正在寻找只生成更新的源文件的生成选项--尤其是在键盘Map的上下文中(即:工具/选项/环境/键盘)--那么您希望用于更新的Visual Studio版本的选项是:
Build.BuildOnlyProject

相关问题