NuGet 6.0 发行说明
NuGet 分发车辆:
NuGet 版本 | 适用于 Visual Studio 版本 | 适用于 .NET SDK |
---|---|---|
6.0.0 | Visual Studio 2022 版本 17.0.0 | 6.0.01 |
6.0.1 | Visual Studio 2022 版本 17.0.2 | 空值 |
6.0.2 | Visual Studio 2022 版本 17.0.11 | 6.0.3011 |
6.0.3 | Visual Studio 2022 版本 17.0 | 6.0.1101 |
6.0.5 | 空值 | 6.0.1181 |
6.0.6 | 空值 | 6.0.1271 |
1 随具有 .NET Core 工作负荷的 Visual Studio 2022 一起安装
摘要:6.0.6 新增功能
- [安全性]:Microsoft 安全公告 CVE-2024-0057 | NuGet 客户端绕过安全功能漏洞 - #12653
摘要:6.0.5 中的新变化
- [安全性]:Microsoft 安全公告 CVE-2023-29337 | NuGet 客户端远程代码执行漏洞 - #12653
注意
Linux 上存在行为中断性变更。 NuGet 在其各种操作期间用于存储临时文件的位置已从 /tmp/NuGetScratch
更改为 /tmp/NuGetScratch<username>
。 例如,对于用户 User1,临时文件夹将变为 /tmp/NuGetScratchUser1
。
摘要:6.0.3 中的新变化
- [安全性]:Microsoft 安全通报 CVE-2022-41032 | .NET 特权提升漏洞 - #12149
注意
Visual Studio 17.0、MSBuild 17.0 和 .NET 6.0 需要 NuGet.exe 6.0 或更高版本。
摘要:6.0.2 中的新变化
- [安全性]:Microsoft 安全公告 CVE 2022-30184 | .NET 信息泄露漏洞 - #11883
摘要:6.0.0 中的新变化
🎉 这是针对 .NET 6.0 提供 NuGet 包的完整创作与还原支持的第一个版本 🎉
.NET 6 支持
NuGet 6.0 是针对 .NET 6.0 提供 NuGet 包的完整创作与还原支持的第一个版本。 现在可面向以下目标框架:
- net6.0
- net6.0-windows
- net6.0-android
- net6.0-ios
- net6.0-macos
- net6.0-maccatalyst
- net6.0-tvos
- net6.0-tizen
如果目前不熟悉 .NET 6.0 目标或其未来状况,请记得查看 .NET 6.0 TFM 规范。
资源映射
今年早些时候,众多包管理器意识到依赖关系混淆攻击,其中某一用户被欺骗安装恶意依赖关系,而不是其打算安装的依赖关系。 为强化软件供应链免受这些攻击,NuGet 团队开发了一项新功能,可用于将依赖关系映射到特定源。 以下示例说明了如何使用源映射来保护项目。
<!-- Define a global packages folder for your repository. -->
<!-- This is where installed packages will be stored locally. -->
<config>
<add key="globalPackagesFolder" value="globalPackagesFolder" />
</config>
<!-- Define my package sources, nuget.org and contoso.com. -->
<!-- `clear` ensures no additional sources are inherited from another config file. -->
<packageSources>
<clear />
<!-- `key` can be any identifier for your source. -->
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="contoso.com" value="https://contoso.com/packages/" />
</packageSources>
<!-- Define mappings by adding package ID patterns beneath the target source. -->
<!-- Contoso.* packages will be restored from contoso.com, everything else from nuget.org. -->
<packageSourceMapping>
<!-- key value for <packageSource> should match key values from <packageSources> element -->
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
<packageSource key="contoso.com">
<package pattern="Contoso.*" />
</packageSource>
</packageSourceMapping>
可在今年早些时候发布的博文中详细了解源映射。
Visual Studio 中的包漏洞
在 Visual Studio 中使用 NuGet 包管理器时,现在会看到针对包的包漏洞,其中包括漏洞的数量和严重性等详细信息,以及可了解有关各公告的详细信息的直接链接。
重试与回退行为
现在有一个 NUGET_ENABLE_EXPERIMENTAL_HTTP_RETRY
标志来改进 NuGet 客户端的重试和回退行为,例如增加最大重试次数,以及在遇到互联网连接较弱时增加延迟以实现更具弹性的体验。
排除默认文件扩展名
现在可使用 MSBuild 标志 <AllowedOutputExtensionsInPackageBuildOutputFolder>
编辑包的生成输出中包含的文件扩展名。 这样,便可更好地控制生成输出文件夹中包含的扩展。
改进 Visual Studio 中的弃用信息
Visual Studio 中已弃用的包现在包含指向建议的可用备用包的链接。 可使用此功能快速浏览和安装主动维护的包。
在 Visual Studio 中添加包自述文件
现在可直接在 Visual Studio 中添加包 README.md 文件。 自述文件有助于传达有关包的重要信息。 在 NuGet.org 上访问包时,访问者通常会看到的第一个项目。自述文件通常包括有关以下内容的信息:
- 包的用途
- 包为什么有用
- 用户如何开始使用包
- 用户可获取帮助或为包做出贡献的位置
可在我们的博客上详细了解如何将自述文件添加到 NuGet 包。
在 Visual Studio 中实现更快的解决方案加载和分支切换
在 Visual Studio 2022 中,NuGet 已重新定义 NuGet 包还原与常见 Visual Studio 组件之间的协定,以便仅调用还原一次而不是多次来提升大型解决方案的性能。 此特性可大幅缩短后台进程完成所需的时间。
安装 Visual Studio 2022 预览版,并告知我们是否发现加载大型解决方案或在分支之间切换时的速度更快!
NuGet 的 SolutionRestoreManager Visual Studio API 已移至 NuGet.VisualStudio 包中
NuGet.SolutionRestoreManager.Interop 不再更新,且其 API 已合并到 NuGet.VisualStudio 包中。 如果要更新现有 Visual Studio 扩展以使用 Visual Studio 2022 (17.0),且先前使用的是 NuGet.SolutionRestoreManager.Interop,则应卸载该包并将 NuGet.VisualStudio 升级/安装为版本 6.0.0。 命名空间和类将保持不变,因此从 API 角度来看它可兼容。
此外,在 Visual Studio 的策略更改之后,NuGet.VisualStudio 将不再使用 EmbedInteropTypes
。
因此,扩展将具有对 NuGet.VisualStudio.dll 的编译时间引用。
NuGet 会指示 Visual Studio 使用绑定重定向,因此当 NuGet 更新到较新版本且扩展是针对较旧版本的程序集进行编译时,扩展不会受到影响。
因此,可从 vsix 中取消 NuGet 的程序集以缩小下载大小。
NuGet 的包将更新为在 NuGet 6.2 中自动执行此操作(适用于 Visual Studio 17.2)。
若要从 vsix 中取消 NuGet 的程序集,请将以下内容添加到项目文件:
<ItemGroup>
<SuppressFromVsix Include="NuGet.VisualStudio.dll" Visible="false" />
<SuppressFromVsix Include="NuGet.VisualStudio.Contracts.dll" Visible="false" />
</ItemGroup>
功能:
添加挂钩,以便从 NuGet 包中排除某些生成输出扩展 - #10690
使用 net6.0 及以上版本时为 xamarin TFM 实现新的优先级 - #10717
在 net6.0 及以上版本项目“回退”到 xamarin.ios 时实现 maccatalyst 警告 - #10718
添加包命名空间支持以作为配置的一部分 - 仅添加读取功能 - #10725
包命名空间:在 PackageReference 还原中下载包时考虑包命名空间筛选 - #10732
在 nuget.exe 和 msbuild /t:restore 中的 packages.config restore 中添加命名空间筛选支持 - #10737
添加用于标识还原源的协定,以帮助 NuGet 更好地完成批处理还原/分支交换。 - #10807
新增对 net6.0-tizen 和 net6.0-android 的支持 - #10819
为 Visual Studio 中的 packages.config restore 添加命名空间筛选支持 - #10823
添加对 TfmSpecificDebugSymbolsFile 的支持,以便在内部版本中提供符号 - #10913
如果安装了易受攻击的包,则在“已安装”选项卡中显示警告图标 - #10982
出现漏洞时,在包列表中按包显示警告图标 - #10983
在 PMUI 的包详细信息窗格中显示包漏洞详细信息 - #10985
在 PM UI 的“详细信息”页面上添加“弃用链接”- #10996
[功能]:允许为 NuGet 客户端配置重试计数和退避行为 - #11027
[功能]:为 PackageReference 和 PackageDownload 场景中的包命名空间工作解决所有包安装规则。 - #11035
[功能]:为包配置样式项目中的包命名空间工作解决所有包安装规则 - #11036
此版本中已修复的问题
DCR:
考虑删除允许其他包管理器显示为兼容的扩展性 - #6623
停止将 EmbedInteropTypes 用于 NuGet 的 VS 扩展包/程序集 - #10892
Project.nuget.g.targets 不应追加到 MSBuild 16 或更高版本中的 MSBuildAllProjects - #10895
删除过时的核心 API - #10940
将 NuGet.SolutionRestoreManager.Interop 合并到 NuGet.VisualStudio 中 - #10957
删除 RuntimeEnvironmentHelper.IsDev14 - #11000
将 Newtonsoft.Json 更新到 13.0.1 - #11095
[DCR]:将 packageNamespaces 功能重命名为 packageSourceMapping - #11205
Bug:
使用包保存模式 "nuspec" 进行安装始终会重新安装 - #2402
Update-Package -reinstall -ProjectName
<project>
不适用于 PR - #6088“已添加具有相同键的项”- 当项目图包含 projectName == packageRef 名称(同一版本)时- #6795
[测试失败] 建议删除“接受许可证”对话框中的第二个重复字符串“接受许可证”- #8162
无法使用 nuget.exe 删除配置密钥 - #8223
msbuild /t:Restore 和 Visual Studio 在程序集名称 != 项目名称时生成不同的资产文件 - #8272
当 999,500 <= count <=999,999 时,PM UI 无法实现下载计数的人性化 - #8800
Roslyn 分析器建议“使用包管理器进行安装”会将 NuGet 打开到错误选项卡 - #10124
当项目不是“
KnownToBeMSBuildFormat
通过解决方案文件调用”时,StaticGraph Restore 应明确标注 - #10363"nuget spec" 命令生成带 iconUrl 的 .nuspec 文件 - #10400
Rfc3161TimestampTokenInfo.GetNonce 可能引发 - #10484
Mono 上未禁用 verify 命令 - #10585
CreateLockFileTargetLibrary 方法会减慢还原操作 - #10614
PackageArchieveReader 未覆盖 CopyNupkgAsync,因此包提取失败 - #10708
将包命名空间信息传播到 restore 命令 - #10736
务必在 PMUI 中的 packages.config 包安装/更新中遵循命名空间筛选 - #10738
NuGet.Packaging.Extract:未找到资源中的异常 - #10776
在对符号使用 snupkg 时无法使用嵌入的 PackageReadmeFile - #10791
删除 NuGet 项目初始化中的冗余 UI 延迟开关 - #10824
删除还原代码路径中不必要的 ToList 枚举 - #10835
将 IVsPackageInstallerServices 标记为已弃用 - #10836
NuGet 包下载次数已超过 10 亿次显示错误的单位 - #10864
难以在深色主题的“更新”和“合并”选项卡右侧看到数字的背景色 - #10896
IVsProjectRestoreInfoSource 改进 - #10898
packages.lock.json 与面向 net5.0-windows 的 Sdk-Style C# 项目中断 - #10901
为 IVsSolutionRestoreService4 添加默认实现 - #10908
[响应能力] 通过不需要的 GetServiceAsync 扩展从后台线程中删除隐式 RPC - #10916
布尔的装箱操作旨在计算哈希代码,但会导致过度分配 - #10917
循环访问库依赖关系会导致枚举器过度分配 - #10918
兼容性缓存查找会为每个查找分配 Func - #10919
DependencyWalker.CreateGraphNode 中的 WhereListIterator 过度分配 - #10920
还原时出现异常:“还原元数据缺少所需的目标框架列表”- #10924
跨托管代码约定共享框架减速器 - #10925
使用不正确的绑定重定向生成 NuGet VSIX - #10946
运行 init 脚本时 NuGet 包管理器 UI 出现延迟 - #10947
支持在 nuget restore/install 和 dotnet restore package 或其他等效命令上传递的 sourceUri - #10948
针对 nuget.exe install 命令的命名空间筛选支持 - #10961
停止为每个段生成原始属性 - #10969
从未选择的可传递引用(修剪后的子图)中出现意外 NU1605 - #10972
NuGet.Localization 没有包图标 - #10975
避免在计算项目关闭时不必要地调整字典大小 - #10976
有关 ISettings.AddOrUpdate 的文档出现冲突 - #10980
复制文件和验证签名时使用共用字节数组 - #10988
避免在依赖关系演练器中进行 Task.WhenAny 分配 - #10989
务必在 PMC 中的 packages.config 包安装/更新中遵循命名空间筛选 - #11001
务必在 IV 的安装程序 API 的 packages.config 包安装/更新中遵循命名空间筛选 - #11002
[Bug]:当所选包已安装时,PM UI 将下载计数显示为 0 - #11012
减少 VersionFormatter 中的分配 - #11014
已过时的未使用类型:LibraryDependencyType 和相关类型 - #11015
[Bug]:
nuget.exe install packages.config
未遵循-PackageSaveMode nuspec
- #11018[Bug]:
$(IsPackable)
未引用 - #11025使用用于 PMUI 包命名空间筛选的多源存储库来创建 Apex 测试 - #11026
[Bug]:[辅助功能] 难以在使用浅色或深色主题的 PM UI 搜索结果中看清链接 - #11055
IVsSolutionRestoreService4 应扩展 IVsSolutionRestoreService3 - #11098
[Bug]:应在 PMUI 的详细信息窗格中对齐公告链接 - #11101
已安装的易受攻击/弃用包版本的警告图标的工具提示不够清晰 - #11103
[响应能力] RestoreOperationLogger+StatusBarProgress.Dispose 会阻止等待 UI 线程的线程池线程 - #11115
添加自上次还原指标以后经过的时间 - #11124
[Bug]:处理 5.9.1 与 5.10.0 之间的递归
<files>
条目时出现 nuget.exe 回归 - #11125当项目具有待定提名时会等待 WhenNominated - #11132
支持 dotnet add package 上传递的 sourceUri 选项 - #11140
[Bug]:VS PM UI 不显示包的 JPEG 图标 - #11144
UI 延迟:
nuget.packagemanagement.visualstudio.dll!NuGet.PackageManagement.VisualStudio.VsCoreProjectSystemReferenceReader+<GetProjectReferencesAsync>d__
- CPS 项目 - #11162[Bug]:
dotnet list package --outdated --interactive
会让凭据提供程序将列出的每个包的缓存失效 - #11169[Bug]:无法为某一包找到匹配的命名空间时,针对 package.config 场景的包命名空间会将用所有源用作回退选项 - #11170
避免在 NuGet 项目初始化期间对 UI 线程执行 MEF 查找 - #11176
[Bug]:“已安装”选项卡中警告指示器图像的工具提示不再有效 - #11183
检索 MEF 服务的所有 ServiceLocator 调用均应避免使用 UI 线程。 - #11201
[Bug]:Visual Studio 中缺少遥测事件 - #11206
避免重复的 EnvDTEProjectUtility.IsSupportedAsync 调用 - #11207
添加 IVsSolutionManager.GetSolutionDirectoryAsync - 提高性能,并停止阻止异步代码路径中的调用线程。 - #11208
重命名产品/测试代码中的类型/变量以反映包命名空间功能的新名称 - #11216
[Bug]:ArPow 生成在不相关 Git 存储库的子目录中效果不佳 - #11227
dotnet list package --vulnerable, --deprecated, --outdated 不适用于仅传递性的正值 - #10767
摘要:6.0.1 中的新变化
只有 Visual Studio 已使用此版本的 NuGet 进行更新。
此版本中已修复的问题
- [Bug]:无法从 Visual Studio 17 中的 Service Broker 获取 INuGetProjectService - #11367
- [Bug]:包管理器控制台初始化可能会导致死锁 - #11320
社区参与
感谢帮助实现此出色 NuGet 版本的所有参与者!
谁 | PR | 问题 |
---|---|---|
omajid | 3866 | Rfc3161TimestampTokenInfo 中的句柄 nonce 为 null - #10484 |
marcin-krystianc | 3934 | 为 LockFileTargetLibrary 添加缓存 - #10614 |
krafs | 4151 | 从关于 ISettings.AddOrUpdate 的文档中删除返回值 - #10980 |
huangqinjin | 4148 | 修复 PackageSaveMode nuspec 始终会重新安装的问题 - #2402 |
Insomniak47 | 4190 | 修复(文档):删除参与准则中指向已关闭/死角链接的链接 - #8987 |
marcin-krystianc | 4194 | 让性能脚本考虑还原操作失败 - #9968 |
eriawan | 4159 | 用单引号修复 Surround ($IsPackable) - #11025 |
huangqinjin | 4193 | 安装 packages.config 应遵循 PackageSaveMode - #11018 |
mfkl | 4199 | 测试:使用新的 DependencyGraphSpec - #11168 |
omajid | 4254 | 将 --work-tree 与 git apply 配合使用 - #11227 |
欢迎反馈
反馈对我们非常重要。 如果此版本存在问题,请查看 GitHub 问题和 Visual Studio 开发者社区以了解现有问题。 对于 NuGet 中的新问题,请报告 GitHub 问题。 对于常规 NuGet 体验问题,请通过报告问题选项告知我们;该选项位于帮助 > 报告问题下的常用 IDE 中。