因此,正如标题所示,我有一个 VS2010解决方案,其中包含约50个项目。如果我对一个没有任何参考的“顶级”项目进行更改,那么 VS 仍然会重新构建所有50个项目。我正在运行 VisualStudio2010终极版,没有任何附加组件。我使用 ILMerge 将所有的项目合并到一个文件中。
我通过检查较低级别 dls 的时间戳来验证这一点,并查看它们确实是重新构建的,即使它们的代码没有被修改。
我已经阅读了所有的回复和评论:
在 Visual Studio 中重新生成 C # 项目的原因
但他们中的大多数只是提供了关于卸载项目的建议,以加快建设时间,但没有具体的解决方案。我试图弄明白为什么 VS 认为这些依赖项目需要重建,而实际上它们并不需要,并且需要修复它们。
我打开了“工具 > 选项 > 项目和解决方案 > 建立和运行 > 只在运行时建立启动项目和依赖”,但是没有效果。
另外,如果我只是重新构建一个只有8个(in)直接依赖项的“中级”项目,那么即使没有调用 ILMerge 并且没有修改任何依赖项目,它仍然会构建所有8个项目。
感谢大家提供的任何见解。
补充
为了测试一些建议,我从头开始创建了一个新的 WinForms 项目。然后,我在该解决方案中创建了两个新项目。我将我的两个“最低级别”项目中的所有代码和资源(不是项目文件)复制到两个全新的项目中(我将文件和文件夹从资源管理器中删除到 Visual Studio 中的项目中)。
最低的项目,让我们称之为 B,没有参考任何其他项目。下一个项目,A,只引用了 B。所以一旦我添加了所需的。NET 和外部程序集引用到项目,然后将生成解决方案。
然后我有了我的新 WinForm 项目参考 A,并做了一个完整的构建,所以参考链是:
WinForm -> A-> < strong > B
然后,我修改了 WinForm 只有并做了一个标准的构建(F6)。
在对项目 B中的源文件进行了一些系统的删除之后,我发现如果我删除了我的 Resources.Designer.cs
和 Resources.resx
(并且注释掉了使用这些资源的 .Properties.Resources
对象的代码) ,那么对 WinForm的修改将不再重建整个解决方案,而只会重建 WinForm。
将 Resources.resx
和 Resources.Designer.cs
添加回项目 B(但是将引用的代码注释掉,这样就不会有任何东西利用这些资源)将重新引入完整的构建行为。
为了查看资源文件是否损坏,我再次删除了它们,然后创建了一个新的(通过 Project Properties-> Resources) ,并重新添加了与之前相同的资源,即一个 Excel 文件。有了这个设置,完整的重建仍然会发生。
然后删除了单个资源,但是将资源文件保留在项目 B中。即使没有添加资源,但是资源文件仍然在项目中,也会发生完全(不需要的)重建。
似乎只需将一个资源文件添加到(。NET 3.5)项目将导致 VisualStudio2010始终重新生成该项目。这是一个错误还是预期的/预期的行为?
再次感谢大家!