标题相当简单。如果我点击build按钮,它就像“全部重建”按钮。如果我有两个项目,让我们称之为父项目和子项目,然后我对父项目进行更改并单击“构建”按钮。vs中的默认行为是重新生成父级和子级,而此时它只应重新生成父级。
我想知道这是否是Visual Studio中的一个选项,以及如何更改它。
谢谢。

最佳答案

你的问题似乎有些不一致,所以为了清楚起见,我将定义我使用的术语。
构建:编译并链接应用程序/项目所需的所有内容
清除:删除作为生成的一部分生成的所有文件。
重建:先执行清理,然后执行生成。
我的Visual Studio没有“(re)build all”按钮,但是它有一个“(re)build solution”按钮,所以我假设您是这样想的。我还要假设,在您所说的地方,您的意思是,它不是重新编译项目中的每个文件。
生成和生成解决方案选项不同。
执行构建将评估当前项目(及其依赖项),编译所需的任何内容。
执行构建解决方案将评估解决方案中的所有项目,编译所需的任何内容。
因此,如果您有一个包含3个项目的解决方案:
孩子
服务(依赖于儿童)
前端
然后,假设当前选择的项目是服务:
构建:将评估/编译:子级和服务
构建解决方案:将评估/编译:子级、服务和前端
现在,我相信您看到的是,当您在父级上执行构建时,vs也在子级上执行构建,即使它没有改变。我希望它正在评估孩子,因为它需要知道它是否发生了变化。如果不执行评估,就无法知道,这就是为什么在输出窗口中,您会看到它对子项目做了一些事情。这通常是相当快的,尽管如果您有很多依赖项,它确实会加起来。
如果您不希望vs在构建父对象时评估您的依赖关系,那么您可以遵循一些方法,但您选择远离工具保护,因此除非您小心,否则可能会出现二进制不匹配等…
一些选项:
卸载未更改的子项目(在解决方案资源管理器中右键单击并选择“卸载”)。这隐藏了依赖项,因此不会编译它)。
停止让Visual Studio管理依赖项。最安全的方法是删除基于项目的引用,而不是使用基于二进制的引用(指向每个依赖项的编译输出)。但这可能是一项不平凡的工作,因为您必须管理项目构建自己。
我建议你仔细考虑一下你在问什么,并评估节省的时间(可能有一些)是否值得冒这样的风险:你可能时不时地得不到你所需要的一切,最终花时间追逐你的尾巴。

08-27 00:20
查看更多