nuget 是否创建单独的包?

Does nuget create separate packages?

我仍然对 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 究竟在哪里查找项目的依赖项?

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

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

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

VS2017 允许您在创建新项目 (Tools/Options/NuGetPackageManager/General) 时使用 select "PackageReferences" 或旧的 "Packages.Config" 格式。

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

要将旧项目转换为新格式,我相信您需要从项目中删除所有包,然后再将它们添加回来。它们将使用您 selected 的默认格式添加,如果您 selected "Allow format selection on first package install".

,则会提示确认