【发布时间】:2019-12-20 07:44:48
【问题描述】:
我有一个名为 Application 的 .NET 应用程序。
此应用程序依赖于两个 NuGet 包:
-
Database,版本 2.* -
Logging,版本 3.*
Database 包依赖于两个额外的包:
-
DTO,版本 1.* -
DAL,版本 4.*
目前,Application 使用这些具体的包版本:Database 版本 2.1、Logging 版本 3.1。
我构建了我的Application,NuGet 解析并下载了依赖项,所以我得到了DTO 1.5 版和DAL 4.0 版。我将我的Application 放入安装包并交付给我的客户。我在 git 中用 app-1.0 标记了这个版本。
所以我的客户得到了以下二进制文件:
-
Application.exe,1.0 版 -
Database.dll,2.1 版 -
Logging.dll,3.1 版 -
DTO.dll,1.5 版 -
DAL.dll,4.0 版
一年后,客户提交了一个我需要彻底分析的错误。为了重现该问题,我需要与客户相同的二进制文件,因此我查看了标签 app-1.0 并想要构建我的应用程序。
同时,DAL 和 DTO 包在 NuGet 源上进行了更新:最新的 DTO 版本是 1.7,DAL 版本是 4.5。
我的问题是:
- 当我现在构建我的应用程序时,NuGet 是否将
Database依赖项解析为最新的可用版本?那么我是否得到DTO 1.7和DAL 4.5而不是DTO 1.5和DAL 4.0(用于构建app-1.0)? - 如果是,如何使用 NuGet 确保我的版本的二进制可重现性?
- 如果不是,NuGet 如何解决“正确”的引用?
【问题讨论】:
-
您正在使用在
packages.config或PackageReference中指定版本的具体nuget 包。您可以使用旧版本的软件包构建标记为app-1.0的代码(当然,如果您没有更新它们) -
@PavelAnikhouski 问题不在于我直接引用的包。问题是关于我引用的包的浮动依赖项。
-
您被指定了 nuget 上依赖包的最低版本。答案取决于
Database包配置。如果它适用于旧版本的DTO和DAL,则构建代码不会有任何问题。如果针对app-1.0构建代码而不使用nuget 中的Update-Package更新包版本,也没有问题
标签: .net dependencies nuget versioning binary-reproducibility