Unity 6.3
0 онлайн 91 гостей 3 в системе
Вход
Пакеты и управление пакетами Шаг 9 из 281

Конфликт версии пакета и его разрешение

Когда вы добавляете пакет в манифест проекта, Unity считает, что пакет a зависимость Однако пакет может также иметь зависимости от других пакетов, которые создают косвенные зависимости в любых проектах, требующих этого пакета.

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

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

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

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

Примечание: При разрешении пакетов Package Manager выбирает версии с использованием следующего общего приоритета:

  1. Пакеты, установленные из других источников источники, например встроенные пакетыи зависимости, объявленные с локальные пути, Гит URLs, и встроенный пакетов над зависимостями, основанными на версиях.
  2. Прямые зависимости, которые вы определили как , прикреплены к пакетам.
  3. Прямые зависимости, которые объявлены с версиями.

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

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

Заблокировать файлы и resolutionStrategy

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

Когда Package Manager не может найти решение, которое использует только заблокированные пакеты, он выбирает наиболее безопасные обновления, выбирая сначала версии патчей, затем второстепенные версии, а затем главные версии. Однако вы можете изменить это поведение, используя свойство 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

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

На графике зависимостей синие узлы указывают, какие версии выбрал Package Manager
На графике зависимостей синие узлы указывают, какие версии выбрал Package Manager

Дополнительные ресурсы