Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Разрешение и конфликт

При добавлении пакета в манифест проектакаждый проект Unity имеет манифест проекта, который действует как точка входа для диспетчера пакетов. Этот файл должен находиться в каталоге /Packages. Диспетчер пакетов использует его для настройки многих вещей, включая список зависимостей для этого проекта, а также любой репозиторий пакетов для запроса пакетов. Дополнительная информация
См. в Словарь
, Unity считает этот пакет зависимость
См. в Словарь
проекта (прямая зависимость). Однако пакет также может иметь зависимости от других пакетов, которые создают косвенные зависимости в любых проектах, которым требуется этот пакет.

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

График прямых и косвенных зависимостей пакетов для проекта
График прямых и косвенных зависимостей пакетов для проекта

В этом примере:

  • Голубые узлы обозначают прямые зависимости проекта.
  • Темно-синие узлы показывают тот же пакет и версию, что и непрямые зависимости в этом проекте.
  • Красные узлы показывают две разные версии одного и того же пакета, что является конфликтом.

Примечание. Необходимо разрешать только зависимости пакетов, объявленные с версиями. Диспетчер пакетов выбирает пакеты, установленные из других источников, таких как встроенные пакеты
См. в Словарь
и зависимости, объявленные с помощью локальные пути, URL-адреса Git и встроенные пакеты в зависимости от версии .

Выбор лучшего решения

В зависимости от набора пакетов, определенных в манифесте проекта, оценка всех возможных комбинаций пакетов может занять много времени: потенциально проект может зависеть от сотен пакетов, каждый из которых зависит от сотен других пакетов, наиболее требовательных к разные версии.

Блокировка файлов и стратегия разрешения

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

Иногда диспетчер пакетов не может найти решение, включающее только заблокированные пакеты. В этом случае диспетчер пакетов использует решение с наименее рискованными обновлениями, предпочитая обновления исправлений незначительным или основным обновлениям, а также по умолчанию незначительные обновления основным обновлениям. Однако вы можете настроить степень агрессивности диспетчера пакетов при рассмотрении более новой версии с помощью свойства resolutionStrategy.

Пример

В этом примере запрошено несколько версий следующих пакетов:

  • burst@1.2.2 (дважды) и burst@1.3.0-preview.3
  • collections@0.5.1-preview.11 и collections@0.5.2-preview.8
  • jobs@0.2.4-preview.11 (дважды) и jobs@0.2.5-preview.20

Используя набор прямых и косвенных зависимостей, диспетчер пакетов выбирает самую старшую версию пакетного пакета ( burst@1.3.0-preview.3), который удовлетворяет зависимости пакета collections@0.5.2-preview.8:

На графике зависимостей синие узлы указывают, какие версии выбрал диспетчер пакетов.
На графике зависимостей синие узлы указывают, какие версии выбрал диспетчер пакетов.

  • В Unity добавлен новый решатель зависимостей пакетов (SAT). 2019.4 NewIn20194
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3