什么是project.lock.json?


72

我按照说明创建了一个新的.NET Core项目,并通过cmd运行了该项目:

dotnet new
dotnet restore

第二条语句创建project.lock.json包含很多垃圾(不是真正的垃圾,而是大量的依赖项,配置等)。我假设这些依赖项是.NET框架,该框架分解为单独的NuGet包。

我的问题:

  1. 我的假设正确吗?
  2. 我可以通过删除不需要的NuGet软件包/依赖项来减轻我的应用程序的负担吗?
  3. 怎么样?

2
为什么这个被否决?我相信NuGet是.net核心应用程序所必需的。否则,您可以在本地克隆软件包并提供自己的提要。
roydukkey

通常,您不会触摸锁定文件。您将修改project.json本身,并且在运行工具时锁定文件将自动更新。
gretro

2
我认为您的问题2是一个好问题,应有自己的SO问题。
Nate Barbettini

Answers:


99

更新project.json已被替换.csproj为.NET Standard项目的主要项目文件。此问题涉及NuGet 4.0中引入PackageReference之前的旧系统。

您可能仍然偶尔会将其project.lock.json视为构建过程的工件,但应将其忽略。.NET Standard / .NET Core项目所依赖的NuGet软件包的管理应始终由以下任一者完成

  • .csproj直接编辑文件
  • 使用dotnet CLIdotnet add package,etc)
  • 如果您使用的是Visual Studio,请使用包管理器GUI

后代的旧答案project.lock.json当您恢复项目的程序包时,它是由.NET工具生成的。您不应该触摸它或将其检入源代码管理。project.json直接编辑。

在包还原过程(dotnet restore)中,NuGet必须分析项目中的依赖关系,遍历它们的依赖关系图,并确定应为您的项目安装哪些包以及项目的依赖关系。

这是一项艰巨的工作,因此将结果缓存起来,project.lock.json以使后续还原更快,更有效。如果project.json修改并dotnet restore再次执行该锁定文件,将重新生成该锁定文件。



2

每隔一段时间,在我们的团队中,当有人更新一些nuget时,我们就会遇到相同的问题,即使运行dotnet restore ,lock.json文件也不会得到更新,因此,在应用最后一个选择(删除它们)之前,我建议运行grunt从您的命令行。如果这不起作用,请删除所有lock.json文件并运行dotnet restore,这是我最喜欢的选择;)


3
咕unt声有什么关系project.lock.json
Nate Barbettini

1
不要混淆package-lock.jsonproject.lock.json
Myster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.