【问题标题】:Install NuGet packages to Project Dirs instead of Solution Dir?将 NuGet 包安装到项目目录而不是解决方案目录?
【发布时间】:2016-02-28 05:26:06
【问题描述】:

我在 Visual Studio 2015 中有一个解决方案,其中包含大约 40 个项目。其中一些项目引用了一些 NuGet 包。

由于我们的分支策略(每个项目文件夹单独分支)和我们的安全要求(NuGet 二进制文件实际上已检入 TFS)的组合,我希望将每个项目的 NuGet 包安装到每个项目的文件夹,而不是在解决方案的文件夹中。空间使用在这里不是问题。

我看过: https://docs.nuget.org/consume/nuget-config-file https://docs.nuget.org/Release-Notes/NuGet-2.1#Specify-packages-Folder-Location

它们帮助我理解了配置文件的工作原理……但我似乎无法让它做我想做的事。

我已经在我的配置文件中尝试过这个:

<configuration>
  <config>
    <add key="repositoryPath" value="$(ProjectDir)\Nuget\" />
  </config>
</configuration>

但它会在解决方案文件夹中创建一个文件夹,实际上名为“$(ProjectDir)”。

而且我无法硬编码项目文件夹的路径(即 NuGet 文档中的“C:\myteam\teampackages”),因为团队中的几乎每个人都有不同的路径到他们的本地工作区!

我该怎么做?

【问题讨论】:

  • 这不会导致一起构建的不同项目引入不同版本的包吗?我们一直试图避免这种情况,并要求给定基线中的所有项目都必须就要使用的外部资产版本达成一致。
  • 是的,可能......但这对我们来说比满足分支和安全要求更重要!
  • 我看不出这种担忧是次要的。我没有针对您的方案的建议,祝您好运。
  • @GoldieLocks,您使用 vNext 构建还是 XAML 构建?
  • 你找到解决办法了吗?

标签: visual-studio tfs nuget nuget-package


【解决方案1】:

首先,您不应将 NuGet 包签入 TFS 版本控制。使用 NuGet 的优点之一是您可以使用它来避免将二进制文件签入您的版本控制系统。

相反,您需要在 TFS 构建过程中恢复 NuGet 包,然后将下载所需的包。在 VS2015 中,您需要按照此博客中的步骤操作:https://docs.nuget.org/consume/package-restore/team-build)。

一些关键步骤是(假设您正在使用 XAML 构建):

  1. 将以下项目添加到解决方案中。 (nuget.config和.tfignore文件的内容可以在here找到)

  1. 在解决方案文件夹的根路径下添加一个 build.proj 文件。 (build.proj文件的内容可以在here找到)

  2. 在解决方案文件夹的根路径下创建一个名为tools的文件夹。在tools文件夹下创建NuGet子文件夹,在tools\NuGet路径下下载nuget.exe保存。

  3. 签入 nuget.config.tfignorebuild.projtools\NuGet\nuget.exe 进入 TFS 版本控制。

  4. 修改构建定义以选择构建 build.proj 文件。

然后您将在 TFS 构建过程中成功恢复 NuGet 包。

【讨论】:

    【解决方案2】:

    Nuget 文档提到指定包文件夹位置是为了让许多不同的解决方案共享同一个包。这是与您相反的情况。存储库路径设置仅允许您将 NuGet 包安装在指定文件夹(如 C:\teampackages )或相对路径(如 ../Nuget)。

    要在不同的repositoryPath中安装包,你可以尝试:

    <configuration>
        <config>
            <add key="repositoryPath" value="../Nuget" />
        </config>
    </configuration>
    

    检查案例:Is it possible to change the location of packages for NuGet?

    【讨论】:

    • 这与我所要求的完全相反,不是吗?
    • 是的,相对路径仅相对于解决方案文件夹。存储库路径设置仅允许您将 NuGet 包安装在指定文件夹(如 C:\teampackages )或相对路径(如 ../Nuget)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2018-01-07
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多