如何指定一个安装所有 nuget 包的中心位置,以便所有项目都可以引用同一个包文件夹。
当 1 个项目删除时,引用不依赖于另一个项目。所以我可以轻松地在单个文件夹中更新新版本的 nuget 并适用于所有。
它还将在源代码管理中节省磁盘空间。
有人可以给我任何建议吗?
如何指定一个安装所有 nuget 包的中心位置,以便所有项目都可以引用同一个包文件夹。
当 1 个项目删除时,引用不依赖于另一个项目。所以我可以轻松地在单个文件夹中更新新版本的 nuget 并适用于所有。
它还将在源代码管理中节省磁盘空间。
有人可以给我任何建议吗?
实际上有两个步骤可以正确地将包恢复到不同的位置。假设您使用 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
供参考。
您可以通过 nuget.config 文件指定应放置包文件夹的位置(或更改其名称)。
请参阅:NuGet 配置设置或指定“包”文件夹位置
以下是我们所做工作的完整描述: Force a reference to be absolute using Visual Studio
在夏天: