我想将一些第三方 nuget 包导入到我的项目中。最新的软件包版本是2.3.4.5
如果我将此软件包导入为 2.3.* 以便我从自动导入的补丁中受益,是否安全?明确的主要/次要版本应该可以防止任何重大更改?
该领域的最佳实践是什么?我找不到nuget的微软官方推荐。
是的,您可以设置明确的版本或有限范围的“最新”作为您所指的。哪一个最适合您的项目很大程度上取决于您的背景。
.NET 项目允许 NuGet 包版本范围,请参阅此处。默认值适用于特定版本(无自动更新),请参阅下面的 Visual Studio。
示例:
信心
如果您相信软件包的作者(确实)使用语义版本控制并且从不更改更新中的现有功能,那么请在主要 (2.*) 中获取最新版本。
IMO - 大多数项目表示他们正在使用语义版本,因为他们使用由 3 部分组成的版本号(叹气),但实际上并不符合语义版本控制,也无法可靠地检测重大更改。所以我不信任他们。
再现性
如果您与测试团队合作,如果构建中的包发生更改,他们可能需要进行新的更改审查。因此,可重复性对您来说很重要。也就是说,如果您下周重建该提交,它将使用完全相同的包。
如果您一年后回来重建以前的版本,您是否希望所有软件包自动成为最新版本?就此而言,使用了哪些软件包的真实来源是什么?
关键性
您的应用程序有多重要?自动获取最新作品的便利是否存在风险?或者功能故障的风险是否低于软件包中网络安全问题的风险?你们进行自动构建吗?
测试
如果您有 100% 自动化的功能测试(不仅仅是单元测试),那么请选择最新版本,因为您的测试会破坏构建。无风险!
因此,如果您的团队 100% 使用持续部署……那就去做吧。
(这实际上是我会考虑始终自动使用最新版本的唯一场景)
Visual Studio(示例)
Microsoft Visual Studio 的默认行为是记录您上次导入的版本。如果有更新,它将出现在更新列表中,但直到您选择新版本才会更新(除非您将版本更改为范围)。
您还可以将版本配置为永远不提供这样的更新:
<PackageReference Include="Semver" Version="[2.3.0]" />
我有这个,因为更高的版本破坏了我的应用程序(待调查)。
我
我的做法是始终使用显式版本并定期查看是否有更新和安全问题。在我的所有项目中,软件包版本仅手动更新。