【发布时间】:2013-08-31 03:15:15
【问题描述】:
如何指定一个中心位置来安装所有 nuget 包,以便所有项目都可以引用同一个包文件夹。
当 1 个项目删除时,引用不依赖于另一个项目。所以我可以轻松地在单个文件夹中更新新版本的 nuget 并适用于所有。
它还将在源代码管理中节省磁盘空间。
谁能给我一些建议?
【问题讨论】:
-
你可以使用package restore 并且永远不要将包提交到源代码管理
标签: nuget
如何指定一个中心位置来安装所有 nuget 包,以便所有项目都可以引用同一个包文件夹。
当 1 个项目删除时,引用不依赖于另一个项目。所以我可以轻松地在单个文件夹中更新新版本的 nuget 并适用于所有。
它还将在源代码管理中节省磁盘空间。
谁能给我一些建议?
【问题讨论】:
标签: nuget
您可以通过 nuget.config 文件指定应放置包文件夹的位置(或更改其名称)。
请参阅:NuGet Configuration Settings 或 Specify ‘packages’ Folder Location
【讨论】:
实际上有两个步骤可以正确地将包恢复到不同的位置。假设您使用 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 可能与我的示例不同。只需确保删除该选项并保持其他所有内容不变即可。
注意:现在您已经更改了包目录的位置(或者甚至将其命名为其他名称),您需要更新项目引用以指向新位置。显然建议使用相对路径。您可以在 Visual Studio 中手动执行此操作(痛苦)或打开 .csproj/.vbproj 文件并查找/替换 HintPath 以供参考。
【讨论】:
以下是我们所做工作的完整描述: Force a reference to be absolute using Visual Studio
夏天:
【讨论】: