6

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

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

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

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

4

3 回答 3

3

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

编辑NuGet.Config添加文档 中指定的存储库路径设置。

<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <config>
    <add key="repositorypath" value="..\..\packages" />
  </config>
</configuration>

..\packages 将模仿默认行为。该路径是相对于项目文件夹(而不是 .nuget 文件夹)的,因此 ....\ 将是项目文件的目录。

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

其次,您需要solutionDir从 restore 命令中删除该选项(他们不会告诉您在任何地方执行此操作)。为此,编辑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 可能与我的示例不同。只需确保删除该选项并保持其他所有内容不变。

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

于 2013-10-19T12:46:15.967 回答
1

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

请参阅:NuGet 配置设置指定“包”文件夹位置

于 2013-08-28T10:32:51.303 回答
0

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

在夏天:

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