Используя ASP.NET Core 1.0, лучше всего проверить файл project.lock.json в исходном элементе управления?
Должен ли файл project.lock.json проверяться в исходном элементе управления? (ASP.NET Core 1.0)
Ответ 1
Короткий ответ: Нет, файл project.lock.file не должен быть проверен в исходном элементе управления - вам нужно настроить систему контроля версий, чтобы игнорировать ее (например, добавить ее в .gitignore, если вы используя git).
Длинный ответ. Project.lock.json содержит моментальный снимок дерева общей цепочки проекта - не только пакетов, перечисленных в разделах "зависимости", но также всех разрешенных зависимостей этих зависимостей и т.д., Но это не похоже на ruby Gemfile.lock. В отличие от Gemfile.lock, project.lock.json не сообщает dotnet restore
, какие точные версии пакетов должны быть восстановлены - он просто перезаписывается. По сути, его следует рассматривать как файл кеша и никогда не проверять его в исходном элементе управления.
Если вы проверите его в управлении версиями, то, скорее всего, на другой машине:
-
dotnet
будет думать, что все пакеты будут восстановлены, но на самом деле некоторые пакеты могут отсутствовать, и сборка завершится неудачно, не намекая разработчику запуститьdotnet restore
- project.lock.json будет перезаписан во время
dotnet restore
и в большинстве случаев будет отличаться от версии, сохраненной в исходном элементе управления. Таким образом, он будет изменен почти в каждой фиксации. - project.lock.json вызовет конфликты во время слияния
Ответ 2
На самом деле вы хотите иногда комментировать файл project.lock.json в git.
Проверка вашего проекта json
По тем конкретным причинам, которые он показывает вам, зависимости, которые вы использовали. Скажи:
- Я как разработчик работает в приложении, я ненавижу каждый раз при обновлении пакетов, поэтому добавляю зависимость пакета к пакету nuget X = 1..
- Я восстанавливаю пакет, я получаю версию 1.2.4
- Создатель пакета просто сделал очень тупую ошибку, он что-то сломал, просто пытаясь исправить и освободить 1.2.5
- Лицо 2 проверяет (или, что еще хуже, срабатывает сборка).
- Лицо 2 восстанавливает и получает версию 1.2.5
- Лицо 2 запускает ваше приложение и обнаруживает, что приложение не работает.
- Лицо 2 начинает отладку и считает, что в программном обеспечении должна быть ошибка.
На этом этапе 7 Person 2 мог видеть в git, что его файл блокировки был изменен, и загружена более новая версия библиотеки, которая не была протестирована ни одним из других разработчиков!
Downsides
Недостатки проверки в этом файле - вы можете получить выделение конфликтов слияния при продолжении обновлений пакетов.
Альтернативное решение
Используйте только жесткие зависимости версий (это довольно сложно, но для nuget). И только вручную обновляйте новую версию раз в то время.
Downsides
- Это не работает, если вы создаете библиотеку для использования другими людьми, поскольку вы привязываете их к определенной версии ваших зависимостей.
- Зависимости зависимостей по-прежнему решаются автоматически, поэтому, если вы не укажете их самостоятельно, вы не можете гарантировать там версию на
dotnet restore
Заключение
Если вы хотите избежать цитат "Работает на моей машине" и черты постоянно обновляется вручную до более новой версии: Проверка project.lock.json.
А также постройте проверку сборки CI/Release, чтобы проверить, не изменился ли этот файл по сравнению с git, прежде чем вы отпустите (если ваше программное обеспечение очень критично)!
Если это не проблема, а также автоматическое обновление (к потенциально поврежденному пакету), это не большая проблема, вы можете не захотеть зафиксировать ваш project.lock.json.
Ответ 3
Нет, это всего лишь файл блокировки, поэтому вы никогда не должны проверять его, когда существует файл блокировки (кроме случаев, когда программа, которая заблокировала его, хочет проверить его на исходный элемент управления, в этом случае, исключите свой файл блокировки!).