在生产中使用通配符导入 nuget 包而不是补丁版本是否安全?

问题描述 投票:0回答:1

我想将一些第三方 nuget 包导入到我的项目中。最新的软件包版本是2.3.4.5

如果我将此软件包导入为 2.3.* 以便我从自动导入的补丁中受益,是否安全?明确的主要/次要版本应该可以防止任何重大更改?

该领域的最佳实践是什么?我找不到nuget的微软官方推荐。

.net nuget semantic-versioning
1个回答
0
投票

是的,您可以设置明确的版本或有限范围的“最新”作为您所指的。哪一个最适合您的项目很大程度上取决于您的背景。

.NET 项目允许 NuGet 包版本范围,请参阅此处。默认值适用于特定版本(无自动更新),请参阅下面的 Visual Studio。

示例:

信心

如果您相信软件包的作者(确实)使用语义版本控制并且从不更改更新中的现有功能,那么请在主要 (2.*) 中获取最新版本。

IMO - 大多数项目表示他们正在使用语义版本,因为他们使用由 3 部分组成的版本号(叹气),但实际上并不符合语义版本控制,也无法可靠地检测重大更改。所以我不信任他们。

再现性

如果您与测试团队合作,如果构建中的包发生更改,他们可能需要进行新的更改审查。因此,可重复性对您来说很重要。也就是说,如果您下周重建该提交,它将使用完全相同的包。

如果您一年后回来重建以前的版本,您是否希望所有软件包自动成为最新版本?就此而言,使用了哪些软件包的真实来源是什么?

关键性

您的应用程序有多重要?自动获取最新作品的便利是否存在风险?或者功能故障的风险是否低于软件包中网络安全问题的风险?你们进行自动构建吗?

测试

如果您有 100% 自动化的功能测试(不仅仅是单元测试),那么请选择最新版本,因为您的测试会破坏构建。无风险!

因此,如果您的团队 100% 使用持续部署……那就去做吧。

(这实际上是我会考虑始终自动使用最新版本的唯一场景)

Visual Studio(示例)

Microsoft Visual Studio 的默认行为是记录您上次导入的版本。如果有更新,它将出现在更新列表中,但直到您选择新版本才会更新(除非您将版本更改为范围)。

您还可以将版本配置为永远不提供这样的更新:

    <PackageReference Include="Semver" Version="[2.3.0]" />

我有这个,因为更高的版本破坏了我的应用程序(待调查)。

我的做法是始终使用显式版本并定期查看是否有更新和安全问题。在我的所有项目中,软件包版本仅手动更新。

© www.soinside.com 2019 - 2024. All rights reserved.