代码之家  ›  专栏  ›  技术社区  ›  Brad Leach

VisualStudio2008不必要的项目构建

  •  29
  • Brad Leach  · 技术社区  · 16 年前

    我有一个C#项目,其中包括一个exe和11个库文件。exe引用所有库,lib1可以引用lib2、lib3、lib4等。

    13 回复  |  直到 16 年前
        1
  •  47
  •   Sebastian Good    16 年前

    如果我想运行解决方案 "

    VisualStudio将始终尝试构建所有内容 单个项目,即使该项目不依赖于所有内容。然而,这种选择是可以改变的。转到工具|选项|项目和解决方案|构建和运行,并选中“仅在运行时构建启动项目和依赖项”复选框。然后,当您点击F5时,VS将只构建您的启动项目和它所依赖的DLL。

        2
  •  5
  •   HBdieRE    15 年前

    我刚刚“修复”了与我的VS项目相同的问题。VisualStudio总是进行重建,即使没有更改任何内容。我的解决方案:一个cs文件有一个未来的时间戳(2015年,这是我的错)。我打开文件,保存下来,我的问题就解决了!!!

        4
  •  4
  •   Shea    16 年前

    我们在工作中遇到了类似的问题。在构建后事件中,我们手动将清单嵌入到bin目录的输出中。Visual Studio正在从obj目录复制项目引用(未修改)。时间戳差异触发了不必要的重建。

    如果生成后事件修改项目输出,则修改bin和obj dir中的输出,或将bin dir中修改的输出复制到obj dir中的输出之上。

        5
  •  4
  •   Glorfindel Doug L.    6 年前

    您可以取消选中项目中指定项目的生成选项 Solution configuration :

    SolutionProperties
    (来源: microsoft.com )

    您可以创建自己的解决方案配置来构建特定的项目配置。。。

    build config
    (来源: microsoft.com

        6
  •  4
  •   Glorfindel Doug L.    6 年前

    在我当前的项目中,我们实际上遇到了这个问题,在我们的场景中,甚至运行单元测试(没有任何代码更改)都会导致重新编译。检查构建配置的“平台”。

    如果您使用的是“任何CPU”,那么出于某种原因,它将重建所有项目,而不考虑更改。尝试使用特定于处理器的构建,即x86或x64(使用特定于您机器的机器体系结构的平台)。在x86版本中为我们工作。

    alt text
    (来源: episerver.com )

        7
  •  2
  •   Cyberherbalist    16 年前

    你到底为什么要这么做?也许你正试图节省CPU周期,或者节省编译时间,但是如果你按照你的建议去做,你会突然发现自己处在一个非常好的位置上,让自己一败涂地。如果您有一个依赖于库2的库1,并且只有库2发生了更改,那么您可能认为您可以只构建更改后的库,但总有一天您将对库2进行更改,这将破坏库1,如果没有库2的构建,您将无法在编译中捕获它。所以在我看来,不要这样做。

    这在VS2005和2008中不起作用的原因是VS使用MSBuild。MSBuild针对项目文件运行,在生成目标项目之前,它将检查项目的引用并首先生成所有引用的项目(如果其源已更改)。您可以通过在命令行中对一个未更改但引用的项目已更改的项目运行MSBuild来测试这一点。例子:

    绕过所有这些故障保护的唯一方法是直接使用编译器,而不是通过MSBuild。丑陋,丑陋,但仅此而已。基本上,您将简化为以某种形式重新实现MSBuild,以便完成您想要做的事情。

    这不值得。

        8
  •  1
  •   ChrisLively    15 年前

    查看 following site 有关何时生成项目以及生成和重建之间的差异的详细信息,请参阅。

        9
  •  1
  •   Nathan Kidd    15 年前

    我也有这个问题,在Windows 7 x64、VS2008 SP1上构建时注意到这些警告消息:

    cl:此平台不支持命令行警告D9038:/ZI;而是启用/Zi

    cl:命令行警告D9007:“/Gm”需要“/Zi”;选项被忽略

    C/C++->一般->调试信息格式=/Zi

    C/C++->代码生成->启用最小生成=否

    重建后,我将它们都切换回原来的状态,依赖项又可以正常工作了。但在此之前,任何清理、重建或完全删除输出目录的工作都无法修复它。

        10
  •  0
  •   volatilsis    16 年前

    我不认为在VS中你可以开箱即用。你需要这个插件 http://workspacewhiz.com/

    它不是免费的,但你可以在购买前对它进行评估。

        11
  •  0
  •   Gregory A Beamer    16 年前

    对于解决方案中的X projcts,不,您不能阻止它们的构建,因为系统看到依赖关系已经改变。

        12
  •  0
  •   Mallioch    15 年前

    不确定是否有一种很棒的方法来处理这个问题,但在过去,如果我有一两个项目一直在重建,并且假设我不会在他们那里工作,我会为他们关闭构建过程。

    右键单击sln,选择configuration manager并取消选中复选框。不是完美的,但在VisualStudio无法正常工作时可以正常工作。

        13
  •  0
  •   Richard Frank    11 年前

    如果您继续遇到此问题,可能是由于项目中列出但不存在的已计算依赖项(如标题)丢失或过期所致。

    在迁移到新版本(例如:从2012年到2013年)后,这种情况在我身上尤其常见,因为VS可能在转换过程中重新计算了依赖项,或者您正在迁移到新位置。

    一个简单的缺失文件失败:源和目标之间可能存在更复杂的构建日期关系。您可以使用实用程序找出触发构建的前端测试。要获取该信息,可以启用详细的CPS日志记录。参见:Andrew Arnott -启用C++和JavaScript项目系统跟踪( http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx )。我使用DebugView选项。当你需要它时,它是非常宝贵的工具。

    (这是一个特定于C#的问题,但不同的帖子被合并为相同的帖子)