我有一个名为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.0Database.dll
,版本2.1Logging.dll
,版本3.1DTO.dll
,版本1.5DAL.dll
,版本4.0一年后,客户提交了一个错误,我需要对其进行彻底分析。要重现此问题,我需要与客户使用相同的二进制文件,因此我签出标签app-1.0
,并希望构建我的应用程序。
同时,DAL
和DTO
软件包已在NuGet提要上更新:最新的DTO
版本为1.7,DAL
版本为4.5。
我的问题是:
Database
依赖项解析为最新的可用版本?那么,我得到的是DTO 1.7
和DAL 4.5
而不是DTO 1.5
和DAL 4.0
(它们是用来构建app-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机器上进行此操作。