【问题标题】:Preventing all the copy operations with msbuild and a large solution使用 msbuild 和大型解决方案防止所有复制操作
【发布时间】:2012-07-07 01:20:00
【问题描述】:

我将立即承认对 msbuild 完全不熟悉,并希望我不是在问一个愚蠢的问题。

我们有一个大型 .NET 解决方案,其中包含大约 316 个项目。在构建过程中,将 DLL 从一个文件夹复制到下一个文件夹似乎占用了大量的构建时间(我假设,这样它们就可以用于解析引用?)。有没有办法指示 MSBuild 将每个项目的输出文件放入 one 文件夹以避免需要这样做?这样做似乎是明智之举,因为最终我们将最终结果从最终输出文件夹中复制出来,而所有其他中间 DLL 都被浪费了。

【问题讨论】:

  • @responders:谢谢,这些听起来都不错。我为另一位同事发布了这个,他这周不在,所以我会把它们发给他,看看他的想法。我在看!

标签: .net msbuild


【解决方案1】:

可以通过覆盖OutDir 属性来实现。例如:

msbuild your.sln /p:Configuration=Release;OutDir="C:\SomeFolder\Release" /m

此外,您可以disable the CopyLocal setting for references 加快构建过程。

【讨论】:

    【解决方案2】:

    What are the obj and bin folders (created by Visual Studio) used for?

    确保它实际上是需要时间的副本。使用 /verbosity:diag 运行 msbuild 命令(或使用 /flp:Filename=;Verbosity=diag 写入文件)。在文件末尾,您将看到每个步骤所用的时间。

    您可以尝试使用 /m 选项并行化构建。默认情况下,msbuild 在 1 个线程上运行,并且有 316 个项目,我可以想象这可能会很慢。

    【讨论】:

    • 在我发布之前,我没有看到您关于使用 /m 选项的评论。好建议。
    【解决方案3】:

    构建 316 个项目需要同时构建多个项目。您可以考虑将您的项目分解为分离依赖项的逻辑解决方案。

    还可以通过将 max CPU count 属性设置为更高的值来并行构建项目来加快速度。

    BuildInParallel 是 MSBuild 任务的可选布尔参数。 当 BuildInParallel 设置为 true(其默认值)时,多个 生成工作进程以同时构建尽可能多的项目 时间尽可能。为了使其正常工作,/maxcpucount 开关 必须设置为大于 1 的值,并且系统必须至少 双核或有两个或更多处理器。

    以下是一个例子,取自microsoft.common.targets, 关于如何设置 BuildInParallel 参数。 /maxcpucount:数量 指定参与的工作进程的数量 建造。例如:C:\Windows\WinFX\v3.5>msbuild.exe *.proj /最大CPU计数:3。此示例指示 MSBuild 使用三个 MSBuild.exe 进程,因此允许构建三个项目 平行线。 /m 也是可以接受的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多