使用NuGet软件包确保可复制的版本

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

我有一个名为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放入安装包中并交付给客户。我用app-1.0在git中标记了此版本。

因此,我的客户获得了以下二进制文件:

  • Application.exe,版本1.0
  • [Database.dll,版本2.1
  • Logging.dll,版本3.1
  • [DTO.dll,版本1.5
  • [DAL.dll,版本4.0

一年后,客户提交了一个错误,我需要对其进行彻底分析。要重现此问题,我需要与客户使用相同的二进制文件,因此我签出标签app-1.0,并希望构建我的应用程序。

同时,DALDTO软件包已在NuGet提要上更新:最新的DTO版本为1.7,DAL版本为4.5。

我的问题是:

  • 现在构建应用程序时,NuGet是否将Database依赖项解析为最新的可用版本?那么,我得到的是DTO 1.7DAL 4.5而不是DTO 1.5DAL 4.0(它们是用来构建app-1.0的)吗?
  • 如果是,如何使用NuGet确保发布的二进制可重复性?
  • 如果否,NuGet将如何解决“正确的”引用?
.net dependencies nuget versioning binary-reproducibility
1个回答
0
投票

NuGet在4.9版(Visual Studio 2017,15.9)、. NET Core SDK 2.1.500中引入了锁定文件。 The blog post that introduces it is even titled "Enable repeatable package restores using a lock file"

博客文章仅列出了一种启用锁定文件的方法。一种方法是在与项目文件(packages.lock.json)相同的目录中创建一个名为csproj的空文件,然后进行还原。另一种方法是在命令行上运行dotnet restore --use-lock-file。另一种方法是将RestorePackagesWithLockFile MSBuild属性设置为true,这可以通过多种方式实现(项目文件中的属性,Directory.Build.props中的属性,环境变量,命令行参数)。

一旦创建了锁定文件,将始终使用它,因此您不再需要像第一次那样显式选择加入。请注意,默认情况下,还原将在发现更改时更新锁定文件。如果在无法还原完全相同的软件包时要还原失败,则需要选择“锁定模式”,例如dotnet restore --locked-mode,您可能希望在CI机器上进​​行此操作。

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