你什么时候应该更喜欢ReBuild而不是Build?

pen*_*ake 10 .net msbuild rebuild compilation visual-studio

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

项目或解决方案重建 而不是 在Visual Studio 构建

如果我改写它:为什么MS需要在Visual Studio中创建"重新构建所有"选项?他们这样做的主要动机是什么?

谢谢!

Ben*_*ann 7

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

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

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

    SOLUTION
      |__Dependencies
      |__PROJ_1
         |__bin
         |__obj
         |__(code)
      |__PROJ_2
         |__bin
         |__obj
         |__(code)

如果我在Dependencies中更改我的dll并且不进行重建,VS(和MsBuild)仍将使用PROJ_N\bin\Debug(或bin\Release)中的前一个dll版本,因为依赖查找顺序(请参阅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文件夹中...

  • @ abatishchev:当您的"源代码"消耗了源代码中的某些内容时,需要"清理".MILITARY术语的示例:如果您是一名守卫基地大门的士兵,如果更改了"密码"以通过登机口授权客人,则必须删除"旧密码"并获取"新密码"以便您操作正确! (2认同)