有时,你可能想要验证从哪个源安装了特定包。 下面是一些可以检查的方法。
注释
某些包源支持称为上游源的概念。 例如,Azure Artifacts 上游源。 NuGet 客户端不知道包是否来自上游源。 因此,包源的任何日志记录都会列出配置的源,而不是上游源。
.nupkg.metadata 全局包文件夹中的文件
将包提取到 全局包 文件夹中时,将写入文件 .nupkg.metadata 。 从 NuGet 5.9.0 开始,NuGet 将添加包源。 请参阅下文,将 NuGet 版本映射到 Visual Studio 或 .NET SDK 版本。 例如:
{
"version": 2,
"contentHash": "bw3R9q8cVNhWXNpnvWb0OGP4HadS4zvClq+T1zf7AF+tLY1haZ2AvbHidQekf4PDv1T40c6brZeT/V0IBq7cEQ==",
"source": "https://api.nuget.org/v3/index.json"
}
注释
如果 全局包 文件夹在升级到具有 NuGet 5.9.0 的较新版本工具之前提取了包,该文件 .nupkg.metadata 将为版本 1,并且不包含包源。 可以 清除 全局包 文件夹 ,以确保所有包都将包含包源。
小窍门
NuGet 仅将 .nupkg.metadata 文件写入 全局包 文件夹。 使用 packages.config 解决方案包文件夹的项目不会创建 .nupkg.metadata 文件。
安装包日志信息
从 NuGet 5.9.0 开始,NuGet 在还原消息中输出包源,告知已安装包。 例如:
Installed Moq 4.16.1 from https://api.nuget.org/v3/index.json with content hash bw3R9q8cVNhWXNpnvWb0OGP4HadS4zvClq+T1zf7AF+tLY1haZ2AvbHidQekf4PDv1T40c6brZeT/V0IBq7cEQ==.
小窍门
此消息以正常/信息详细程度输出。 Visual Studio 和 dotnet CLI 默认为最小详细程度,因此默认情况下不会显示此消息。
msbuild
nuget CLI 工具默认采用普通的详细程度,因此此消息将在默认情况下可见。
HTTP 日志消息
当包在本地不可用时,例如在全局包文件夹、回退文件夹或本地文件源中找不到,NuGet 将通过 HTTP 从任何已配置的包源下载该包。 HTTP 请求和响应会在正常的详细级别下被记录,并且每个包版本你应该只看到一个请求和响应。 例如:
info : GET https://api.nuget.org/v3-flatcontainer/moq/index.json
info : OK https://api.nuget.org/v3-flatcontainer/moq/index.json 56ms
info : GET https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg
info : OK https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg 3ms
如果最近下载了这些文件,可以从 NuGet 的 http-cache 中检索这些文件
CACHE https://api.nuget.org/v3-flatcontainer/moq/index.json
CACHE https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg
对于不同的 NuGet HTTP 服务器实现,URL 格式可能有所不同,无论是实现 NuGet V2 还是 V3 HTTP 协议。
如果你的nuget.config定义了多个 HTTP 源,你将会看到每个包的index.json文件有多个请求,每个源对应一个请求。 但是,每个版本的包只能下载一次 nupkg 。
包签名日志消息
如果下载的包已签名,NuGet 将验证签名,并将详细记录以下消息:
PackageSignatureVerificationLog: PackageIdentity: Moq.4.16.1 Source: https://api.nuget.org/v3/index.json PackageSignatureValidity: True
此消息将报告包是从 HTTP 包源下载还是从本地包源复制。 如果包已在 全局包 文件夹中或回退文件夹中可用,则不会输出该包。
重要
由于 删除了对 VeriSign CA NuGet 的信任,因此在某些平台上,在某些版本的 NuGet 和 .NET SDK 中禁用了已签名的包验证。 因此,相同的包可能包含 PackageSignatureVerificationLog 日志,或者这些日志可能缺失,具体取决于运行还原的平台以及正在使用的 .NET 或 NuGet 版本。
NuGet 版本映射
以下版本的 NuGet 对包源日志记录进行了重要更改:
| NuGet 版本 | Visual Studio 版本 | .NET SDK 版本 |
|---|---|---|
| NuGet 5.9.0 | Visual Studio 2019 16.9.0 | .NET 5 SDK 5.0.200 |