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