标题相当简单。如果我点击构建按钮,它就像“全部重建”按钮。如果我有两个项目,我们称之为PARENT和CHILD,然后我对Parent进行更改并单击“Build”按钮。 VS中的默认行为是重建PARENT AND CHILD,它应该只重建PARENT。
我想知道这是否是Visual Studio中的一个选项以及我如何更改它。
感谢。
答案 0 :(得分:5)
你的问题似乎有些不一致,所以为了清楚起见,我将定义我正在使用的术语。
我的Visual Studio没有'(重新)构建全部'按钮,但它有一个'(重新)构建解决方案'按钮,所以我假设你的意思是。我还要假设您说rebuild PARENT and CHILD
的位置,您的意思是build PARENT and CHILD
,并且它不会重新编译项目中的每个文件。
Build 和 Build Solution 选项不一样。
所以,如果你有一个包含3个项目的解决方案:
然后,假设当前选择的项目是服务:
现在,我相信你看到的是当你在 Parent 上执行构建时,VS正在 Child 上执行构建好吧,即使它没有改变。我希望它评估 Child ,因为它需要知道它是否已经改变。如果不进行评估,就无法知道,这就是为什么在输出窗口中你会看到它已经对 Child 项目做了些什么。这通常相当快,但如果你有很多依赖项,它会加起来。
如果您不希望VS在构建父项时评估您的依赖项,那么您可以遵循一些方法,但是您选择退出工具保护,所以除非您小心,否则可能会出现二进制不匹配等...
一些选项:
我建议你再三考虑一下你在问什么,并评估是否节省时间(可能有一些)是值得冒险的,你可能不会再建立所需的一切,所以最终花时间追逐你的尾巴。
答案 1 :(得分:5)
右键单击解决方案资源管理器中的解决方案,选择属性。
来自配置属性>您可以从构建过程中排除特定项目的配置
来自公共属性>您可以创建项目Dependansies并删除项目依赖项
希望这会有所帮助......
Muse扩展
答案 2 :(得分:4)
我在一个解决方案中遇到了大约40个项目的类似问题。对我来说,以下设置比其他答案感觉危害更小。
Ctrl + Shift + B
或仅构建父项目,享受更短的构建时间。但是,如果您希望再次构建所有项目,请不要忘记更改为其他构建配置。如果您右键单击它们并选择构建,则仍可以构建已取消选择的其他项目。有关Configuration Manager的更多信息,请访问MSDN:Configuration Manager Dialog Box。
答案 3 :(得分:3)
请查看此文章:
[HKEY_CURRENT_USER \ SOFTWARE \微软\ VisualStudio的\ 12.0 \一般] “U2DCheckVerbosity”= dword:00000001
设置注册表项时(我必须添加它),只需使用适用于您的visual studio版本。例如。 14.0 == VS2015
所呈现的诊断可以帮助您确定msbuild认为事情已经过时的原因。
答案 4 :(得分:2)
Alt + B,U将构建只是您当前的项目。如果您不希望在解决方案中构建所有项目,那么这是一个很好的捷径。
答案 5 :(得分:1)
我也遇到过C ++这个问题。即使我没有更改源代码或头文件,依赖项目也会完全重新编译。
我为所有依赖项目关闭了“整个程序优化”。现在,如果我更改源代码,我的项目只会重建。可以在Properties-> Configuration Properties-> General。
中找到C ++项目的此选项祝你好运
答案 6 :(得分:0)
我刚刚在一个包含几百个项目的解决方案中看到了类似的情况。每当你点击" build"时,VS就会去重建大部分项目,即使你刚刚完成了一个完整的版本。如果您只想构建一个项目,也会遇到同样的问题。
事实证明问题是项目之间的循环依赖。 通常,VS不允许您从一个项目创建引用,如果这会导致循环。
然而,这只涉及"项目参考"。 VS不会阻止您添加,例如../Debug/bin/OtherSubProject.dll
作为DLL参考。
现在假设我们有一个包含100个项目的解决方案,其中大多数项目依赖于CoreLibrary.dll
。假设某人添加了从CoreLibrary.dll
到ProjectX.dll
的引用(忽略了ProjectX已经依赖于CoreLibrary的事实)。
如果我们现在运行构建,那么首先构建CoreLibrary.dll
,然后构建ProjectX.dll
以及所有其他项目。
现在假设我们再次运行构建,而不更改任何内容。 VS发现CoreLibrary.dll
的一个依赖项,即ProjectX.dll
较新而不是CoreLibrary.dll
,因此需要重建CoreLibrary.dll
。但是,当然,重建核心库迫使重建所有其他项目,包括ProjectX.dll
(这将再次比CoreLibrary.dll
更新。)
解决此问题的方法是摆脱所有循环依赖关系,尤其是意味着您不通过DLL引用引用其他子项目。执行此操作时的临时解决方案是转到解决方案属性 - >配置并简单地禁用循环中某个项目的构建(上例中的CoreLibrary.dll
或ProjectX.dll
)。
另一个常见原因是VS可能会重建未更改的项目:静态文件带有"复制到输出目录:始终"在他们的属性中设置。避免那些。
最后,要调试所有这些并找出导致重建的原因,请转到工具 - >选项 - >项目和解决方案 - >构建并运行,并启用"诊断" MSBuild的输出。然后搜索单词"不是最新的"解决方案构建时在输出窗口中。