安装 NuGet 包时会发生什么情况?
简而言之,不同的 NuGet 工具通常会对项目文件或 packages.config
中的包创建引用,然后执行包还原,从而有效安装包。 nuget install
除外,它仅将包展开到 packages
文件夹,而不修改任何其他文件。
一般过程包括以下步骤:
(除
nuget.exe
之外的所有工具)将包标识符和版本记录到项目文件或packages.config
中。如果安装工具是 Visual Studio 或 dotnet CLI,则该工具首先尝试安装包。 如果不兼容,则不会将包添加到项目文件或
packages.config
中。获取包:
检查包是否(通过标识符和版本号)已安装在 global-packages 文件夹中,如管理全局包和缓存文件夹中所述。
如果包不在 global-packages 文件夹中,则尝试从配置文件中列出的源中检索它。 此时将应用包源映射配置。 对于在线源,请首先尝试从 HTTP 缓存中检索包,除非通过
nuget.exe
命令指定-NoHttpCache
或通过dotnet restore
指定--no-http-cache
。 (Visual Studio 和dotnet add package
始终使用缓存。如果使用缓存中的包,输出中会显示“CACHE”。 缓存有 30 分钟的到期时间。如果已使用浮动版本指定了包,或者没有最低版本,则 NuGet 将联系所有源以找出最佳匹配项。 示例:
1.*
、(, 2.0.0]
。如果包不在 HTTP 缓存中,请尝试从配置中列出的源下载包。 如果下载包,则会在输出中出现“GET”和“OK”。 NuGet 以常规详细级别记录 http 流量。
如果无法从任何源成功获取包,安装将失败,并显示诸如 NU1103 之类的错误。 注意,来自
nuget.exe
命令的错误仅显示最后检查的源,但意味着无法从任何源获取包。
获取包时,NuGet 配置中的源顺序可能适用:
- NuGet 将首先检查源本地文件夹和网络共享,然后再检查 HTTP 源。
保存包副本和 http-cache 文件夹中的其他信息,如管理全局包和缓存文件夹中所述。
如下载,请将包安装到每个用户的 global-packages 文件夹中。 NuGet 创建每个包标识符的子文件夹,然后创建每个已安装包版本的子文件夹。
NuGet 安装所需的包依赖项。 此过程可能会更新过程中的包版本,如依赖项解析中所述。
更新其他项目文件和文件夹:
- 对于使用 PackageReference 的项目,更新存储在
obj/project.assets.json
中的包依赖项关系图。 包内容本身不会复制到任何项目文件夹中。 - 如果包使用源和配置文件转换,则更新
app.config
和/或web.config
。
- 对于使用 PackageReference 的项目,更新存储在
(仅适用于 Visual Studio)如果可用,请在 Visual Studio 窗口中显示包的自述文件。
享受利用 NuGet 包高效处理代码的体验!