【问题标题】:Does nuget create separate packages?nuget 是否创建单独的包?
【发布时间】:2019-04-26 05:13:08
【问题描述】:

我仍然对 nuget 的工作原理感到困惑。我从控制台 git 克隆了一个 C# .sln 项目,然后运行了这个 nuget 命令:

nuget restore my_project.sln

我注意到它生成了两个包,其中包含 my_project 所需的所有依赖项。

一个包位于 my_project/src/packages 下,另一个位于 c:/users/my_user_name/.nuget/packages 下。虽然文件结构略有不同,但两个包中的 DLL 文件是相同的。

这让我很困惑。为什么默认会生成两个包? Visual Studio 究竟在哪里查找项目的依赖项?

更重要的是,我应该更新哪个配置文件以便只保留依赖项的副本,以及如何在我的文件系统中指定包的位置?

【问题讨论】:

  • 嗨,请检查docs.microsoft.com/en-us/nuget/consume-packages/…,全局包文件夹是 NuGet 安装任何下载包的位置。每个包都完全展开到与包标识符和版本号匹配的子文件夹中。使用 PackageReference 格式的项目始终直接使用此文件夹中的包。使用 packages.config 时,包会安装到 global-packages 文件夹中,然后复制到项目的 packages 文件夹中。
  • 包还原时,如果尚未安装包,NuGet 首先会尝试从上述缓存中检索它。如果包不在缓存中,NuGet 会尝试从所有启用的源下载包。有关更多详细信息,请参阅此处:docs.microsoft.com/en-us/nuget/consume-packages/package-restore

标签: c# visual-studio nuget nuget-package-restore


【解决方案1】:

最新版本的 NuGet 支持package references in project files。

此格式将使用您的 %USERPROFILE%.nuget 文件夹作为缓存按需恢复包。并且您的解决方案文件夹不会被包含您可能不想提交到源代码管理的二进制文件的包文件夹“污染”。

VS2017 允许您在创建新项目时选择“PackageReferences”或旧的“Packages.Config”格式(Tools/Options/NuGetPackageManager/General)。

您的解决方案中可能有一些项目使用较旧的“Packages.config”格式(存储在解决方案目录的packages 文件夹中)和较新的“PackageReferences”格式。

要将旧项目转换为新格式,我相信您需要从项目中删除所有包,然后重新添加它们。它们将使用您选择的默认格式添加,如果您选择了“允许在首次安装包时选择格式”,则会提示您确认。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2014-07-09
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多