如何指定将安装所有nuget包的一个中心位置

时间:2013-08-28 06:58:55

标签: nuget

如何指定将安装所有nuget包的一个中心位置,以便所有项目都可以引用相同的包文件夹。

当1个项目删除时,引用不依赖于另一个项目。所以我可以轻松地在单个文件夹中更新新版本的nuget并适用于所有版本。

它还可以节省源代码管理中的磁盘空间。

有人可以给我任何建议吗?

2 个答案:

答案 0 :(得分:2)

实际上,有两个步骤可以正确地将软件包还原到其他位置。假设您使用了Visual Studio(右键单击解决方案 - >启用包还原),您将在解决方案所在的同一目录中有一个 .nuget 目录。你需要编辑两个文件才能做到这一点。

修改 NuGet.Config 添加documentation

中指定的存储库路径设置
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <config>
    <add key="repositorypath" value="..\..\packages" />
  </config>
</configuration>

.. \ packages将模仿默认行为。 路径是相对于项目文件夹(不是.nuget文件夹)所以.... \将是项目文件中的目录。

如果您的项目到处都是,请考虑将 Nuget.config 文件移动到源树的根目录,并配置相对于该位置的repositryPath。当然,您也可以使用完整路径但这很难看。

其次,您需要从restore命令中删除solutionDir选项(它们不会告诉您在任何地方执行此操作)。为此,请修改 NuGet.targets

查找RestoreCommand元素并删除solutionDir参数。

来自:<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>

对此:<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch)</RestoreCommand>

根据您使用哪个版本的Visual Studio生成文件,实际的XML可能与我的示例不同。只需确保删除该选项并将其他所有内容保持不变。

NB :现在您已经更改了packages目录的位置(或者甚至将其命名为其他名称),您需要更新项目引用以指向新位置。显然建议使用相对路径。您可以在Visual Studio中手动执行此操作(痛苦)或打开.csproj / .vbproj文件并查找/替换HintPath以供参考。

答案 1 :(得分:1)

您可以通过nuget.config文件指定packages文件夹的放置位置(或更改其名称)。

请参阅:NuGet Configuration SettingsSpecify ‘packages’ Folder Location