通过检查较低级别的dll时间戳,我已经验证了这一点,并且发现它们确实被重建,即使它们的代码没有被修改。
我已阅读以下所有回复和评论: Visual Studio 2008 keeps rebuilding Visual studio keeps building everything Strange VS2010 build glitch occurs in my solution
但是,大多数建议卸载项目以加快构建时间,但没有具体的修复方案。我正在尝试弄清楚为什么VS认为这些依赖项项目需要重新构建,而它们实际上不需要,并进行修复。
我已经打开了“工具>选项>项目和解决方案>生成和运行>仅在运行时构建启动项目和依赖项”,但没有效果。
此外,如果我只重新构建一个“中级”项目,该项目仅有8个(间接)依赖项,则它仍会构建所有8个项目,即使没有调用ILMerge并且没有修改任何依赖项项目。
感谢大家提供的任何见解。
添加
为了测试一些建议,我从头开始创建了一个新的WinForms项目。然后我在该解决方案中创建了两个新项目。我将我两个“最底层”项目的所有代码和资源(不包括项目文件)复制到了这两个全新的项目中(我通过将文件和文件夹从资源管理器中拖放到Visual Studio中的项目中来完成此操作)。
最低的项目,我们称之为B,没有引用任何其他项目。下一个项目A只引用了B。因此,一旦我将所需的.NET和外部程序集引用添加到项目中,解决方案就能够构建。然后,我让我的新WinForm项目引用A并进行了完整的构建。因此,引用链是: WinForm -> A -> B 然后,我仅修改了WinForm并进行了标准构建(F6)。与以前一样,Visual Studio重新构建了所有三个项目。
经过对项目B源文件的系统性排除,我发现如果我删除了
Resources.Designer.cs
和Resources.resx
(并注释掉使用这些资源的.Properties.Resources
对象的代码),那么修改WinForm将不再重建整个解决方案,而只会重建WinForm。将
Resources.resx
和Resources.Designer.cs
添加回项目B(但将引用的代码注释掉,以便没有任何内容使用资源),可以重新引入完整的构建行为。为了确定我的资源文件是否已损坏,我再次删除它们,然后创建一个新文件(通过项目属性->资源),并重新添加与之前相同的资源,这是一个单独的Excel文件。在此设置下,仍将发生完全重建。
然后我删除了单个资源,但保留了项目B中的资源文件。即使没有添加资源,但仍在项目中保留资源文件,也会发生完全(不必要的)重建。
似乎只要向.NET 3.5项目添加了资源文件,Visual Studio 2010就会始终重建该项目。这是一个错误还是预期的行为?
再次感谢大家!