.net core:为什么dotnet restore会生成一个“锁定”文件,它的用途是什么?

时间:2016-07-15 07:42:33

标签: .net locking restore .net-core

我是dot.net核心的新手并尝试过示例,dotnet new,dotnet restore,dotnet run。

第二步(dotnet恢复)之后,我试图删除这个锁文件,然后“dotnet run”失败,因为它说需要一个锁定文件。为什么Microsoft设计了这样的“锁定”文件?为什么“run”命令需要这样的锁文件?

如果此锁定文件旨在阻止多个进程构建项目,那么它只需要是一个空文件,充当“锁定”。但实际上,与其他源代码相比,这个文件非常大。

2 个答案:

答案 0 :(得分:8)

如果您查看锁定文件,您将看到它包含已传输的每个依赖项的确切版本的详细信息。这&#34;锁定&#34; <{1}}再次运行之前的那组版本。

我认为至少的目标是允许开发人员决定是否将dotnet restore文件检入源代码控制,从而更好地控制何时使用更新的依赖项。我认为关于何时/是否这个好主意还存在争议。

它还允许多个工具直接查看依赖关系图,而无需再次计算它(如果依赖关系发生变化,可能会以不稳定的方式)。

答案 1 :(得分:1)

存在差异。如果检查文件的内容,您将看到它包含应用程序正在使用的所有NuGet包的完整列表。这不一定与project.json中包含的内容相同,因为project.json可以使用通配符并且对其版本(例如1.0.0。*)含糊不清。它也比project.json更完整,因为它包含了project.json中指定的框架中包含的所有库。这是来自project.json.lock文件的一个小摘录:

取自: https://blog.falafel.com/what-is-project-lock-json/

                   "locked": false,
                   "version": -9996,
                   "targets": {
                "DNX,Version=v4.5.1": {
                  "Microsoft.AspNet.DataProtection.Abstractions/1.0.0-beta5": {
                    "dependencies": {
                      "Microsoft.Framework.Runtime.Abstractions": "1.0.0-beta5"
                    },
                    "frameworkAssemblies": [
                      "mscorlib",
                      "System",
                      "System.Core",
                      "Microsoft.CSharp"
                    ],
                    "compile": {
                      "lib/dnx451/Microsoft.AspNet.DataProtection.Abstractions.dll": {}
                    },
                    "runtime": {
                      "lib/dnx451/Microsoft.AspNet.DataProtection.Abstractions.dll": {}
                    }
                  }