【问题标题】:How can I specify one central place where all the nuget packages will be installed如何指定一个安装所有 nuget 包的中心位置
【发布时间】:2013-08-31 03:15:15
【问题描述】:

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

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

它还将在源代码管理中节省磁盘空间。

谁能给我一些建议?

【问题讨论】:

标签: nuget


【解决方案1】:

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

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

【讨论】:

  • 我试过了,但我不会在 Visual Studio 2010 中工作?有人可以详细说明它在 nuget 2.1 和 Visual Studio 中的工作方式吗?
  • 是的,它在 2010 年有效。但是当我在解决方案中启用恢复包选项然后重建包时,将恢复默认包目录。如何在这种情况下也设置共享路径?跨度>
【解决方案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 参数。

来自:&lt;RestoreCommand&gt;$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)&lt;/RestoreCommand&gt;

对此:&lt;RestoreCommand&gt;$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch)&lt;/RestoreCommand&gt;

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

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

【讨论】:

  • 感谢您的详细说明。尝试了所有步骤,但仍然无法正常工作。如果我将 NuGet.config 移动到 c:\dev\src,并将 repositoryPath 值设置为 ..\packages,我应该期望在 c:\dev\packages 中有一个文件夹吗?
  • @KlausNji,如果您将配置放在 src 目录中,我认为它不会起作用。它需要位于根目录 (C:\dev) 中。如前所述,路径是相对于项目的,而不是你的 Nuget.config 文件所在的位置。因此,如果您使用 ..\packages 并且您的项目位于 C:\dev\src\myproject\myproject.csproj 中,那么它将最终位于 C:\dev\src。
  • 谢谢,它帮助了我。我试图从 2 小时内修复与此相关的错误。有了这个解决方案,它得到了修复。 :)
【解决方案3】:

以下是我们所做工作的完整描述: Force a reference to be absolute using Visual Studio

夏天:

  1. 每个开发人员都创建了一个目录来存储来自所有解决方案的所有包。
  2. 然后在他们的机器上创建指向该目录的虚拟驱动器号。
  3. 修改 %Appdata%\NuGet\NuGet.Config 处的全局 nuget.config 以使用新位置
  4. 重新安装软件包以更改 .csproj 文件中的 HintPath
  5. 将更改推送到源代码管理。

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2011-12-02
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2014-04-17
    • 2015-11-16
    相关资源
    最近更新 更多