我是dot.net核心的新手并尝试过示例,dotnet new,dotnet restore,dotnet run。
第二步(dotnet恢复)之后,我试图删除这个锁文件,然后“dotnet run”失败,因为它说需要一个锁定文件。为什么Microsoft设计了这样的“锁定”文件?为什么“run”命令需要这样的锁文件?
如果此锁定文件旨在阻止多个进程构建项目,那么它只需要是一个空文件,充当“锁定”。但实际上,与其他源代码相比,这个文件非常大。
答案 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": {}
}
}