다음을 통해 공유


호스트가 RID 관련 자산을 결정함

RID(런타임 식별자) 관련 자산을 사용하여 애플리케이션을 실행할 때 호스트가 실행 중인 플랫폼과 관련된 자산을 결정합니다. 이는 애플리케이션 자체와 AssemblyDependencyResolver에서 사용하는 확인 논리 모두에 적용됩니다.

이전에는 호스트가 런타임에 RID를 계산한 다음 RID 그래프를 읽어 계산된 RID와 일치하거나 호환되는 RID 관련 자산을 결정하려고 했습니다. 이제 기본 동작은 RID를 계산하거나 RID 그래프를 사용하지 않습니다. 대신 호스트는 런타임 자체가 빌드된 방법에 따라 알려진 RID 목록을 사용합니다.

이전 동작

이전에 RID 관련 자산을 선택하는 프로세스는 다음과 같았습니다.

  1. 루트 프레임워크(Microsoft.NetCore.App)의 .deps.json 파일에서 RID 그래프를 읽습니다.
  2. 런타임에 현재 RID를 계산하고 RID 그래프에서 해당 항목을 찾습니다. 존재하지 않는 경우 대체 RID(컴파일 시간에 호스트에 제공됨)를 확인합니다.
  3. RID 그래프에 있는 항목부터 시작하여 해당 RID와 일치하는 자산을 찾습니다.
  4. 일치하는 자산을 찾거나 목록이 끝날 때까지 RID 그래프 항목의 RID 목록에서 계속 아래로 내려갑니다.

RID 그래프에 계산된 RID 또는 대체 RID가 없었다면 RID 자산이 제대로 확인되지 않은 것입니다.

새 동작

기본적으로 프로세스에서 더 이상 RID 그래프를 사용하지 않습니다. 대신 호스트가 빌드된 방법에 따라 알려진 이식 가능 RID 집합을 확인합니다. 예시:

Linux

  • linux-x64
  • Linux
  • unix-x64
  • unix
  • any

Windows

  • win-x64
  • win
  • any

macOS

  • osx-x64
  • osx
  • unix-x64
  • unix

호스트 또는 런타임의 이식 불가능한 빌드의 경우 빌드에서 먼저 확인되는 이식 불가능한 RID를 설정할 수도 있습니다.

도입된 버전

.NET 8 미리 보기 5

호환성이 손상되는 변경의 형식

이 변경 사항은 이진 호환성에 영향을 줄 수 있으며 또한 동작 변경입니다.

변경 이유

RID 그래프는 유지 관리하고 이해하는 데 비용이 많이 들었기 때문에 .NET 자체가 취약한 방식으로 배포판을 인식해야 했습니다. .NET 팀과 커뮤니티는 그래프를 업데이트하고 이러한 업데이트를 이전 릴리스로 백포팅하는 데 적지 않은 시간을 소비합니다. 장기적인 목표는 RID 그래프 업데이트를 중지하고, RID 그래프 읽기를 중단하고, 결국에는 RID 그래프를 제거하는 것입니다. 이번 호환성이 손상되는 변경 사항은 이 목표를 향한 한 걸음입니다.

이식 가능 RID(예 linux, linux-musl, osx, win)를 사용합니다. 특수한 사용 사례의 경우 사용자 지정 로드 논리에 NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) 또는 AssemblyLoadContext.ResolvingUnmanagedDll과 같은 API를 사용할 수 있습니다.

이전 동작으로 되돌리려면 runtimeconfig.json 파일에서 이전 버전과의 호환성 스위치 System.Runtime.Loader.UseRidGraphtrue로 설정하세요. 스위치를 true로 설정하면 호스트가 RID 그래프를 읽는 이전 동작을 사용하도록 지시합니다. 또는 프로젝트 파일에서 UseRidGraph MSBuild 속성을 true로 설정합니다. 예를 들면 다음과 같습니다.

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

영향을 받는 API

참고 항목