Подтвердить что ты не робот

Должен ли файл project.lock.json проверяться в исходном элементе управления? (ASP.NET Core 1.0)

Используя ASP.NET Core 1.0, лучше всего проверить файл project.lock.json в исходном элементе управления?

4b9b3361

Ответ 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

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