.net core: почему dotnet restore создает файл блокировки, для чего он нужен?

Я новичок в dot.net core и попробовал пример, dotnet new, dotnet restore, dotnet run.

После 2-го шага (восстановление dotnet) я попытался удалить этот файл блокировки, затем «запуск dotnet» не удался, так как он говорит, что ему нужен файл блокировки. Почему Microsoft разработала такой файл «блокировки» и почему для команды «Выполнить» требуется такой файл блокировки?

Если этот файл блокировки предназначен для предотвращения создания проекта несколькими процессами, то он должен быть только пустым файлом, действующим как «замок». Но на самом деле этот файл довольно большой по сравнению с другими исходниками.


person Troskyvs    schedule 15.07.2016    source источник
comment
Запуск .NETCore в операционной системе Unix неизбежно приводит к появлению unix-подобных артефактов.   -  person Hans Passant    schedule 15.07.2016
comment
Возможный дубликат Что такое project.lock.json?   -  person Nate Barbettini    schedule 16.07.2016


Ответы (2)


Если вы посмотрите на файл блокировки, вы увидите, что он содержит сведения о точной версии каждой зависимости, которая была восстановлена ​​транзитивно. Это «блокирует» этот набор версий до тех пор, пока dotnet restore не будет запущен снова.

Я полагаю, что цель, по крайней мере, была в том, чтобы позволить разработчикам решать, следует ли регистрировать project.lock.json файлы в системе управления версиями, давая больше контроля над тем, когда именно будут использоваться обновленные зависимости. Я думаю, что до сих пор ведутся споры о том, когда и является ли это хорошей идеей.

Это также позволяет нескольким инструментам напрямую просматривать граф зависимостей, без необходимости его повторного вычисления (возможно, нестабильным способом, если зависимости изменяются).

person Jon Skeet    schedule 15.07.2016
comment
Теперь я получаю сообщение об ошибке dotnet restore. Как это возможно? - person mbob; 23.02.2017
comment
@mbob: я предлагаю вам задать новый вопрос с вашим project.json (или, лучше, с минимальным, который все еще демонстрирует проблему) и точной ошибкой, которую вы получаете. Убедитесь, что вы также предоставили подробную информацию о версии .NET Core SDK, которую вы используете, учитывая, что в новых версиях используется csproj вместо project.json. - person Jon Skeet; 23.02.2017

есть отличия. Если вы изучите содержимое файла, то увидите, что он включает полный список всех пакетов 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": {}
                    }
                  }
person robert jebakumar2    schedule 14.03.2017