【问题标题】:What is the easiest way to execute restore of nuget packages on build outside solution folder在解决方案文件夹外部构建时执行还原 nuget 包的最简单方法是什么
【发布时间】:2015-11-05 15:03:57
【问题描述】:

设置

我有一个解决方案Commons.sln,其中包含其他更具体项目的常用工具。让我们以一个名为Cars.sln 的特定解决方案为例,只是为了更容易探索这个案例。所有解决方案都有自己的一组 NuGet 包。 所有项目都位于同一个 VCS 分支中,因此文件夹结构非常严格。

我想达到什么目标?

我想参考所有特定项目中的通用库。因此,我已将 Commons.sln 的项目添加到我的 Cars.sln。但是我遇到了这个设置的问题,因为我的团队中从未构建过Commons.sln 的人没有将此解决方案中的 NuGet 包下载到他们的机器上,并且当尝试构建 Cars.sln 时 - 他们面临一个错误,说项目的 dll未找到来自 Commons.sln 的信息。

长话短说 - 我想在构建之前执行 nuget restore ../../Commons/Commons.sln,但不知道如何在 Visual Studio 中每次构建/重建的 Cars.sln 解决方案级别上做得更好。

具体说明

我对此进行了一些研究,并且有我的要点:

  1. 我不想在 VCS 中提交我的任何 NuGet 包
  2. 我是 adding a .target file per solution 的解决方案,但它仅在我直接使用 msbuild.exe 构建时才有效。
  3. 在其他SO question。有一个建议是添加一个项目并通过构建顺序解决它,这对我来说似乎是 hacky。

特定项目绑定到 CI 服务器,所以这个结构也应该在那里工作(目前我已经通过添加一个构建步骤来解决 Commons.sln 在其他一切之前)

欢迎提出任何建议。

【问题讨论】:

    标签: visual-studio msbuild continuous-integration nuget nuget-package-restore


    【解决方案1】:

    目前我已通过在 Commons.sln 中向项目添加 msbuild 目标来修复它,这是对所有项目(包括特定项目)的依赖项,例如 Cars.sln

    <Target Name="Test" BeforeTargets="BeforeBuild">
      <Message Text="Restoring Common Nugets" Importance="high"></Message>
      <Exec Command="nuget restore &quot;$(ProjectDir)..\Avid.Common.sln&quot;" />
    </Target>
    

    但是,如果有人有更好的解决方案,我很乐意知道。

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2015-10-11
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      相关资源
      最近更新 更多