【问题标题】:Optimizing Visual Studio solution build - where to put DLL files?优化 Visual Studio 解决方案构建 - 将 DLL 文件放在哪里?
【发布时间】:2010-10-04 00:50:27
【问题描述】:

我发现,如果您没有在所有地方启用“本地复制”,那么包含许多项目的 C# 解决方案的构建时间会变得更快。我做了一些测试,似乎(至少对于我们的解决方案)我们可以通过删除“复制本地”将构建时间增加 2-3 倍。这可能意味着我们必须将库存储在某个公共目录中。

任何建议/最佳实践如何实现这一目标?请注意,我希望保留对项目的引用,而不是对 DLL 的引用。

【问题讨论】:

    标签: c# visual-studio-2008 msbuild build


    【解决方案1】:

    我们将项目的输出目录重新定位为 ../../Debug(或 ../../Release) 我们的库也放置在这些目录中。

    我们将每个项目中的引用路径设置为相应的 Debug 或 Release 目录(此设置保留在用户文件中,因为它是绝对引用而不是相对引用)

    我们将项目引用保留为项目引用,所有 dll 引用都具有复制本地错误和特定版本错误,除非它们是我们知道将在所有已部署机器上的 GAC 中的系统级 dll。

    这在 IDE 中进行手动构建,从命令行模拟脚本构建(使用 MSBuild)

    不用于部署的测试项目不会将其输出定向到集中的 Debug|Release 目录,它们只是使用标准的默认位置(并使用本地复制以避免锁定问题)

    库版本可能会通过自动构建过程替换 Debug 和 Release 目录中的 dll 来更改。

    【讨论】:

      【解决方案2】:

      如果您的应用程序分布在解决方案中,我建议构建到 ..\..\Build。 (如果您只有一种解决方案,您可以考虑使用 ..\Build。)默认情况下,Visual Studio 会在其输出文件夹中选取参考文件。但是,在没有 VS 的情况下使用 MSBuild 构建时,您必须将构建文件夹添加为参考路径,如下例所示:

        <Target Name="BuildApp">
          <MSBuild
              Projects="@(ProjectReference)"
              Targets="Rebuild"
              Properties="ReferencePath=..\..\Build;$(LibraryFolder)" >
          </MSBuild>
          <OnError ExecuteTargets="BuildFailed" />
        </Target>
      

      这个例子也把我带到了我的第二个论点。我认为您应该将构建文件夹用作库文件夹,因为这可能会导致个别项目错误地覆盖库程序集,例如通过使用复制本地。你应该严格控制你的库版本,所以我建议你把它分开。 (开发者需要将此路径添加到 VS 中作为参考路径。)

      您也可以选择将 ..\..\Build 分为 ..\..\Release 和 ..\..\Debug 为 suggested by ShuggyCoUk

      【讨论】:

        【解决方案3】:

        我喜欢在基于 Unix 的系统中常见的顶级 Bin Lib 文件夹设置,顺便说一句,迁移到这种类型的系统也将使您的发布工程师的生活更加轻松。只需将所有内容从一个文件夹中提取出来,安装程序的创建就大大简化了。然后DLL会进入bin..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-25
          • 2012-01-14
          • 1970-01-01
          • 1970-01-01
          • 2013-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多