将NuGet包安装到Project Dirs而不是Solution Dir?

时间:2015-11-25 12:11:50

标签: visual-studio tfs nuget nuget-package

我在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'),因为团队中的每个人都有不同的路径到他们的本地工作区!

我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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

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

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

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

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

    3. 签入 nuget.config .tfignore build.proj tools \ NuGet \ nuget.exe 进入TFS版本控制。

    4. 修改构建定义以选择构建build.proj文件。 enter image description here
    5. 然后,您将在TFS构建过程中成功恢复NuGet包。