c# - Visual Studio 重建未修改的项目

标签 c# visual-studio-2010 visual-studio msbuild ilmerge

因此,正如标题所示,我现在有一个 VS2010 解决方案,其中包含约 50 个项目。如果我对一个没有任何引用的“顶级”项目进行更改,那么 VS 仍会重建所有 50 个项目。我正在运行没有任何附加组件的 Visual Studio 2010 Ultimate。我正在使用 ILMerge 将所有项目整合到一个文件中。

我已经通过检查较低级别的 dll 的时间戳验证了这一点,并发现它们确实被重建了,即使它们的代码没有被触及。

我已阅读所有回复和评论:

Visual Studio 2008 keeps rebuilding

Visual studio keeps building everything

Strange VS2010 build glitch occurs in my solution

Reasons for C# projects to rebuild in Visual Studio

但他们中的大多数人只是提供有关卸载项目以加快构建时间的建议,但没有提供具体的修复方法。我试图弄清楚为什么 VS 认为这些依赖项目需要重建而它们不需要并修复它。

我打开了“工具 > 选项 > 项目和解决方案 > 构建并运行 > 仅在运行时构建启动项目和依赖项”,但没有任何效果。

此外,如果我只是重建一个只有 8 个(间接)直接依赖项的“中级”项目,那么它仍然会构建所有 8 个项目,即使没有调用 ILMerge 并且没有修改任何依赖项目。

感谢大家提供的任何见解。

已添加

为了测试一些建议,我从头开始创建了一个新的 WinForms 项目。然后我在该解决方案中创建了两个新项目。我将我的两个“最低级别”项目中的所有代码和资源(不是项目文件)复制到两个全新的项目中(我通过将文件和文件夹从资源管理器拖放到 Visual Studio 中的项目中来完成此操作)。

最底层的项目,我们称之为B,没有引用任何其他项目。下一个项目 A 仅引用了 B。因此,一旦我将所需的 .NET 和外部程序集引用添加到项目中,解决方案就会生成。

然后我让我的新 WinForm 项目引用 A 并进行了完整构建。所以引用链是:

WinForm -> A -> B

然后我修改了 WinForm 并进行了标准构建 (F6)。和以前一样,Visual Studio 重建了所有三个项目。

在对项目 B 中的源文件进行一些系统的删除后,我发现如果删除我的 Resources.Designer.csResources.resx (并注释掉使用这些资源的 .Properties.Resources 对象的代码)然后修改 WinForm 将不再重建整个解决方案,只会重建WinForm

Resources.resxResources.Designer.cs 添加回项目 B(但将引用的代码注释掉,这样就什么都没有了正在利用资源)将重新引入完整的构建行为。

为了查看我的资源文件是否已损坏,我再次删除了它们,然后创建了一个新文件(通过项目属性 -> 资源)并重新添加了与之前相同的资源,即单个 Excel 文件。使用此设置,完整重建仍会发生。

然后我删除了单个资源,但将资源文件留在项目 B 中。即使没有添加任何资源,但资源文件仍在项目中,也会发生完全(不需要的)重建。

看来,只要将资源文件添加到 (.NET 3.5) 项目中,Visual Studio 2010 就会始终重建该项目。这是错误还是预期/预期的行为?

再次感谢大家!

最佳答案

打开工具 - 选项,选择项目和解决方案 - 在树中构建和运行,然后将“MSBuild 项目构建输出详细程度”设置为诊断。 这将输出构建项目的原因,即

Project 'ReferencedProject' is not up to date. Project item 'c:\some.xml' has 'Copy to Output Directory' attribute set to 'Copy always'.

Project 'MyProject' is not up to date. Input file 'c:\ReferencedProject.dll' is modified after output file 'c:\MyProject.pdb'.

在这种情况下,解决方法是仅在更新时才复制 some.xml。

构建前后的事件也可以触发构建。

关于c# - Visual Studio 重建未修改的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916729/

相关文章:

c# - LINQ/Projection - 包含用于过滤的所有通配符

jQuery 在 aspx 页面中无法正确显示

c - 为什么 fopen 文件夹失败?

c++ - Visual Studio 功能 - 注释代码 Ctrl K - Ctrl C

C# WPF - GridLength GridUnitType.Auto

c# - 在 C# 中将 asn1 转换为 base64

visual-studio-2010 - VS 2010 : Where are solution settings stored?

python - 尝试使用 C 库并使用 swig 将其公开给 Windows 中的 Python。关于静态与动态以及使用 Visual Studio for swig 的问题

c++ - 在 GPU 上执行计算时 OpenGL 窗口没有响应

c# - 如何在 ASP.NET MVC ActionLink 中将 C# 变量分配给 CSS 类变量