Visual studio 是否将NuGet软件包安装到项目目录而不是解决方案目录?

Visual studio 是否将NuGet软件包安装到项目目录而不是解决方案目录?,visual-studio,tfs,nuget,nuget-package,Visual Studio,Tfs,Nuget,Nuget Package,我在Visual Studio 2015中有一个解决方案,其中包含大约40个项目。其中一些项目引用了一些NuGet包 由于我们的分支策略(每个项目文件夹单独分支)和我们的安全要求(NuGet二进制文件实际上被签入TFS)的结合,我希望每个项目的NuGet包安装到每个项目的文件夹中,而不是解决方案的文件夹中。这里不关心空间使用情况 我看过: 它们帮助我理解了配置文件是如何工作的。。。但我似乎无法让它做我想做的事 我已在配置文件中尝试了以下操作: <configuration> &

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

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

我看过:

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

我已在配置文件中尝试了以下操作:

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

但它在解决方案文件夹中创建了一个名为“$(ProjectDir)”的文件夹

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


如何做到这一点?

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

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

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


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

相反,您需要在TFS构建过程中还原NuGet软件包,然后下载所需的软件包。在VS2015中,您需要遵循此博客中的步骤:)

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

  • 将以下项目添加到解决方案中。(可以找到nuget.config和.tfignore文件的内容)
  • 在解决方案文件夹的根路径下添加一个build.proj文件。(可以找到build.proj文件的内容)

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

  • nuget.config.tfignorebuild.projtools\nuget\nuget.exe检入TFS版本控制

  • 修改生成定义以选择生成build.proj文件。


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

    这是否会导致不同的项目一起构建时会引入不同版本的软件包?我们一直试图避免这种情况,并要求给定基线中的所有项目都必须就使用哪些版本的外部资产达成一致。是的,可能。。。但是,对于我们来说,满足分支和安全性要求并不是什么大问题!我不明白这种担心怎么会是次要的。我对您的方案没有建议,祝您好运。@GoldieLocks,您使用vNext build还是XAML build?您找到解决方案了吗?这与我要求的完全相反,不是吗?是的,相对路径仅与解决方案文件夹相对。存储库路径设置仅允许您在指定文件夹(如C:\teampackages)或相对路径(如../NuGet)中安装NuGet软件包。