Version: 2020.3
범위 지정 레지스트리
잠금 파일

해결 및 충돌

프로젝트 매니페스트에 패키지를 추가할 경우 Unity는 해당 패키지를 프로젝트(직접 종속성)의 종속성으로 간주합니다. 하지만 패키지도 다른 패키지에 대한 종속성을 가질 수 있으며, 이로 인해 이 패키지를 필요로 하는 프로젝트에 간접 종속성이 만들어질 수 있습니다.

대부분의 프로젝트는 게임과 앱을 개발하기 위해 두 개 이상의 패키지를 필요로 하므로 패키지 관리자는 레지스트리에서 검색해서 가져올 모든 요청된 패키지 버전(직접 또는 간접)을 평가하고, 설치할 패키지 버전을 결정해야 합니다. 이를 위해 프로젝트의 모든 직접 및 간접 종속성을 충족하는 패키지 집합을 계산합니다. 프로젝트 종속성부터 시작하여 각 간접 종속성을 재귀적으로 탐색하고, 모든 종속성 정보를 수집한 후 충돌 없이 종속성 요구 사항을 충족하는 패키지 집합을 선택합니다. 예를 들어 이 종속성 그래프는 네 개의 직접 종속성 그리고 그와 관련된 모든 간접 종속성이 포함된 프로젝트를 나타냅니다.

프로젝트의 직접 및 간접 패키지 종속성이 나와 있는 그래프
프로젝트의 직접 및 간접 패키지 종속성이 나와 있는 그래프

이 예제에서 다음을 참고하십시오.

  • 하늘색 노드는 프로젝트의 직접 종속성을 나타냅니다.
  • 진한 파란색 노드는 이 프로젝트의 간접 종속성과 동일한 패키지 및 버전을 나타냅니다.
  • 빨간색 노드는 동일한 패키지의 두 가지 다른 버전, 즉 충돌을 나타냅니다.

참고: 버전으로 선언된 패키지 종속성만 확인해야 합니다. 패키지 관리자는 버전 기반 종속성 대신, 내장 패키지를 비롯한 다른 소스에서 설치된 패키지, 로컬 경로로 선언된 종속성, Git URL, 그리고 빌트인 패키지를 선택합니다.

최고의 솔루션 선택

프로젝트 매니페스트에 정의된 패키지 집합에 따라 가능한 모든 패키지 조합을 평가하는 데는 오랜 시간이 걸릴 수 있습니다. 프로젝트는 잠재적으로 수백 개의 패키지에 종속되고, 각 패키지는 수백 개의 다른 패키지에 종속되고 대부분은 서로 다른 버전을 필요로 할 수 있습니다.

잠금 파일 및 resolutionStrategy

가장 효율적인 솔루션을 제공하기 위해 패키지 관리자는 잠금 파일에서 추적하여 이전에 사용했던 패키지 버전의 우선 순위를 지정합니다. 이는 동일한 입력을 사용하는 후속 종속성 해결과 동일한 출력을 보장합니다. 또한 패키지 다운로드, 추출 또는 복사와 같이 시간이 많이 소요되는 작업을 최소화합니다.

때에 따라 패키지 관리자가 잠긴 패키지만 포함하는 솔루션을 찾을 수 없을 수 있습니다. 이 경우 기본적으로 패키지 관리자는 위험도가 가장 낮은 업그레이드가 포함된 솔루션을 사용합니다. 즉 마이너 또는 메이저 업그레이드보다 패치 업그레이드를 선호하고, 메이저 업그레이드보다 마이너 업그레이드를 선호합니다. 하지만 resolutionStrategy 프로퍼티가 포함된 더 높은 버전을 고려하여 패키지 관리자의 적극성을 커스터마이즈할 수 있습니다.

예제

이 예제에는 요청된 다음 패키지의 여러 버전이 있습니다.

  • burst@1.2.2(두 번) 및 burst@1.3.0-preview.3
  • collections@0.5.1-preview.11collections@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 2019.4에서 새로운 패키지 종속성 솔버(SAT) 추가됨 NewIn20194


범위 지정 레지스트리
잠금 파일