nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.ApplicationServices.Development.VisualStudio / NuGetResolver

NuGetResolver

Full name Microsoft.VisualBasic.ApplicationServices.Development.VisualStudio.VBProj.NuGet.NuGetResolver Assembly Microsoft.VisualBasic.ApplicationServices.Development.VisualStudio Members 13

nuget 依赖解析器: 读取包内 .nuspec, 递归展开传递依赖, 完成目标框架匹配、版本冲突消解与资产(托管 dll / 原生库目录)选择。

00 Remarks

解析策略:

  1. 依赖展开: 以广度优先方式展开依赖图, 每个包只保留一个最终版本;
  2. 版本冲突: 与 NuGet 一致地"取较高版本" —— 在同一 id 上累积全部版本约束,

优先选择同时满足最多约束的最高版本, 因此版本选择单调不降, 展开过程必然收敛;

  1. 框架匹配: 依赖组与资产目录均按 的等级模型

选择"不高于目标框架的最高等级"者;

  1. 资产: 只收集 lib/ 与当前平台 runtimes/<rid>/lib 下的托管 dll

(排除附属资源 *.resources.dll), ref/ 为纯引用程序集(无 IL)因此不用于运行期。

01 Syntax

Microsoft.VisualBasic.ApplicationServices.Development.VisualStudio.VBProj.NuGet.NuGetResolver

02 Methods

NameOverloadsSummary
Resolve 1 解析一个 nuget 包及其全部传递依赖。
ResolvePackages 1 解析入口: 返回根包与全部传递依赖(每个 id 只保留最终选定的版本)。
SelectVersion 1 在全部已有约束下选择版本。
IsUnconstrained 1 该版本范围是否未施加任何约束
HasPrereleaseBound 1 该版本范围的边界是否为 prerelease 版本
LoadPackage 1 把包取到本地缓存, 读取 nuspec, 解析依赖与资产
SelectDependencyGroup 1 选择与目标框架最匹配的依赖组
FindBestFrameworkFolder 1 在给定根目录下挑选与目标框架最匹配的子目录
FindChild 1 按 localName 查找子元素(忽略 xml 命名空间差异)

03 Properties

NameOverloadsSummary
Client 1 包获取客户端
TargetFramework 1 目标框架 moniker
AllowPrerelease 1 是否允许选择 prerelease 版本

04 Fields

NameOverloadsSummary
MaxIterations 1 依赖展开的最大迭代次数(防御性上限, 正常包图远小于此)

05 Members

method Resolve #
Resolve(String, String, String, Boolean)

解析一个 nuget 包及其全部传递依赖。

Parameters
NameTypeDescription
packageIdString

包 id

versionConstraintString

版本或版本范围; 空/Nothing 表示取最新稳定版

targetFrameworkString

目标框架 moniker(如 net10.0)

allowPrereleaseBoolean

是否允许 prerelease 版本

method ResolvePackages #
ResolvePackages(String, String)

解析入口: 返回根包与全部传递依赖(每个 id 只保留最终选定的版本)。

Remarks

参数刻意命名为 versionConstraint 而非 versionRange: VB 是大小写不敏感的, 若命名为 versionRange 会屏蔽同名的 VersionRange 类型, 导致 VersionRange.Parse 解析失败。

method SelectVersion #
SelectVersion(String, List(Of VersionRange))

在全部已有约束下选择版本。

Remarks

与 NuGet 的解析规则保持一致:

  • 没有任何版本约束(例如 #include "pkg")时, 取最新稳定版;
  • 存在版本约束时, 取满足全部约束的最低版本 —— 这可以避免同一个包被

多个依赖要求时把不同大版本的组件混用在一起(例如宿主包是 8.x, 却选到 10.x 的依赖);

  • 约束之间无法同时满足时, 退化为"满足最多约束的最低版本", 保证解析过程仍然收敛。

另外, 若约束的下/上界本身是 prerelease 版本(例如精确锁定 1.0.0-beta), 则会自动放开 prerelease 过滤, 否则锁定 prerelease 的写法永远无法命中。

method IsUnconstrained #
IsUnconstrained(VersionRange)

该版本范围是否未施加任何约束

method HasPrereleaseBound #
HasPrereleaseBound(VersionRange)

该版本范围的边界是否为 prerelease 版本

method LoadPackage #
LoadPackage(String, NuGetVersion)

把包取到本地缓存, 读取 nuspec, 解析依赖与资产

method SelectDependencyGroup #
SelectDependencyGroup(List(Of NuGetDependencyGroup))

选择与目标框架最匹配的依赖组

method FindBestFrameworkFolder #
FindBestFrameworkFolder(String)

在给定根目录下挑选与目标框架最匹配的子目录

method FindChild #
FindChild(XElement, String)

按 localName 查找子元素(忽略 xml 命名空间差异)

property Client #
Client

包获取客户端

property TargetFramework #
TargetFramework

目标框架 moniker

property AllowPrerelease #
AllowPrerelease

是否允许选择 prerelease 版本

field MaxIterations #
MaxIterations

依赖展开的最大迭代次数(防御性上限, 正常包图远小于此)