| title | 安装包时会发生什么情况? |
|---|---|
| description | 有关包安装过程的详细信息 |
| author | karann-msft |
| ms.author | karann |
| ms.date | 06/20/2019 |
| ms.topic | conceptual |
| ms.openlocfilehash | 1ae030c308b14b8884fb608c1683c8c46000b0bd |
| ms.sourcegitcommit | 2b50c450cca521681a384aa466ab666679a40213 |
| ms.translationtype | HT |
| ms.contentlocale | zh-CN |
| ms.lasthandoff | 04/07/2020 |
| ms.locfileid | 77036898 |
简而言之,不同的 NuGet 工具通常会对项目文件或 packages.config 中的包创建引用,然后执行包还原,从而有效安装包。 nuget install 除外,它仅将包展开到 packages 文件夹,而不修改任何其他文件。
一般流程如下:
-
(除
nuget.exe之外的所有工具)将包标识符和版本记录到项目文件或packages.config中。如果安装工具是 Visual Studio 或 dotnet CLI,则该工具首先尝试安装包。 如果不兼容,则不会将包添加到项目文件或
packages.config中。 -
获取包:
-
检查包是否(通过标识符和版本号)已安装在 global-packages 文件夹中,如管理全局包和缓存文件夹中所述。
-
如果包不在 global-packages 文件夹中,则尝试从配置文件中列出的源中检索它 。 对于在线源,请首先尝试从 HTTP 缓存中检索包,除非通过
nuget.exe命令指定-NoCache或通过dotnet restore指定--no-cache。 (Visual Studio 和dotnet add package始终使用缓存。)如果从缓存中使用包,“缓存”将出现在输出中。 缓存有 30 分钟的到期时间。 -
如果包不在 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 包高效处理代码的体验!