【问题标题】:When should you prefer ReBuild instead of Build?什么时候应该更喜欢 ReBuild 而不是 Build?
【发布时间】:2026-02-10 15:30:01
【问题描述】:

为了让我更清楚,我想问你们正确的条件来拥有你的

在 Visual Studio 中重建 而不是 build 项目或解决方案?

如果我改写一下:为什么 MS 需要在 Visual Studio 中创建“Re-build ALL”选项?他们这样做的主要动机是什么?

谢谢!

【问题讨论】:

    标签: .net visual-studio msbuild compilation rebuild


    【解决方案1】:

    有时会出现问题,构建无法正常工作。

    发生这种情况,例如当我没有正确更新依赖库时,这些依赖库没有正确复制到构建的 bin 路径中。还有其他的例子,没想到。

    那是我使用重建的时候。

    【讨论】:

      【解决方案2】:

      DRY : Rebuild = Clean + Build 依次为每个项目。

      构建不会删除以前的构建输出。 重建确实会删除它们并再次构建(如果您在解决方案中,一次一个项目:删除 proj1\bin\Debug,构建 proj1,删除 proj2\bin\Debug ...)。

      我进行重建(或干净构建)的主要情况是我需要更新我的解决方案的第三个依赖项。让我们看看下面的文件夹树:

      解决方案 |__依赖项 |__PROJ_1 |__bin |__obj |__(代码) |__PROJ_2 |__bin |__obj |__(代码)

      如果我在 Dependencies 中更改我的 dll 并且不进行重建,VS(和 MsBuild)仍将使用 PROJ_N\bin\Debug(或 bin\Release)中的先前 dll 版本,因为 Dependency查找顺序(见http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx):

      1. 来自当前项目的文件 - 由{CandidateAssemblyFiles} 指示
      2. $(ReferencePath) - 引用路径属性,来自 .USER 文件。
      3. 来自被引用项目本身的提示路径,由{HintPathFromItem} 指示。
        ...

      bin 文件夹中的 dll 在第一种查找情况下,Dependencies 文件夹中的 dll 在第二种情况下...

      在这种情况下,我会进行清理(调试)、清理(发布),然后进行构建以消除 bin 文件夹中的所有先前版本。我可能有点矫枉过正,重建可能就足够了,但我不确定,因为 dll 位于 Debug 和 Release 文件夹中...

      【讨论】:

      • 换句话说,Rebuild = Clean + Build
      • 大多数时候,对于单个项目,是的。见*.com/questions/1247457/…
      • 在您的 Microsoft.Common.Targets 中,您可以看到项目 Rebuild = BeforeRebuild;干净的; $(_ProjectDefaultTargets);重建后;
      • @ abatishchev :当您的“源代码”使用的源代码发生更改时,需要“清洁”。军事术语的例子:如果你是一个守卫基地大门的士兵,如果更改“密码”以授权客人通过大门,你必须删除你的“旧密码”并获取“新密码”,以便你正常运行!
      最近更新 更多