인스턴스는 AssemblyLoadContext.Default 어셈블리의 종속성을 찾는 역할을 담당합니다. 이 문서에서는 인스턴스의 AssemblyLoadContext.Default 검색 논리에 대해 설명합니다.
호스트 구성 탐색 속성
런타임이 시작되면 런타임 호스트는 프로브 경로를 구성하는 AssemblyLoadContext.Default 명명된 검색 속성 집합을 제공합니다.
각 검색 속성은 선택 사항입니다. 있는 경우 각 속성은 절대 경로의 구분된 목록을 포함하는 문자열 값입니다. 구분 기호는 Windows의 경우 ';'이고 다른 모든 플랫폼에서는 ':'입니다.
속성 이름 | 설명 |
---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
플랫폼 및 애플리케이션 어셈블리 파일 경로 목록입니다. |
PLATFORM_RESOURCE_ROOTS |
위성 리소스 어셈블리를 검색할 디렉터리 경로 목록입니다. |
NATIVE_DLL_SEARCH_DIRECTORIES |
관리되지 않는(네이티브) 라이브러리를 검색할 디렉터리 경로 목록입니다. |
APP_PATHS |
관리되는 어셈블리를 검색할 디렉터리 경로 목록입니다. |
속성은 어떻게 설정되나요?
myapp<.deps.json파일이 있는지 여부에> 따라 속성을 채우는 두 가지 주요 시나리오가 있습니다.
- *.deps.json 파일이 있으면 구문 분석되어 검색 속성을 채웁니다.
- *.deps.json 파일이 없으면 애플리케이션의 디렉터리에 모든 종속성이 포함된 것으로 간주됩니다. 디렉터리의 내용은 검색 속성을 채우는 데 사용됩니다.
또한 참조된 프레임워크에 대한 *.deps.json 파일도 비슷하게 구문 분석됩니다.
환경 변수 DOTNET_ADDITIONAL_DEPS
를 사용하여 추가 종속성을 추가할 수 있습니다.
dotnet.exe
에는 애플리케이션 시작 시 이 값을 설정하는 선택적 --additional-deps
매개 변수도 포함되어 있습니다.
속성은 APP_PATHS
기본적으로 채워지지 않으며 대부분의 애플리케이션에서 생략됩니다.
애플리케이션에서 사용하는 모든 *.deps.json 파일 목록은 .를 통해 System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")
액세스할 수 있습니다.
관리 코드에서 검색 속성을 보려면 어떻게 하나요?
각 속성은 위의 표에서 속성 이름으로 함수를 호출 AppContext.GetData(String) 하여 사용할 수 있습니다.
프로빙 속성의 구성을 디버그하려면 어떻게 해야 하나요?
.NET Core 런타임 호스트는 특정 환경 변수를 사용할 때 유용한 추적 메시지를 출력합니다.
환경 변수 | 설명 |
---|---|
COREHOST_TRACE=1 |
추적을 사용하도록 설정합니다. |
COREHOST_TRACEFILE=<path> |
기본 stderr 값 대신 파일 경로로 추적합니다. |
COREHOST_TRACE_VERBOSITY |
출력 수준을 1(가장 낮음)에서 4(가장 높음)으로 설정합니다. |
관리되는 어셈블리의 기본 탐색
관리 어셈블리를 찾기 위해 검색할 때, AssemblyLoadContext.Default는 다음 순서대로 확인합니다.
- 파일 확장자를 제거한 AssemblyName.Name 후 인
TRUSTED_PLATFORM_ASSEMBLIES
과 일치하는 파일입니다. -
APP_PATHS
에 공통 파일 확장명을 가진 어셈블리 파일들.
위성 자원 조립 탐사
특정 문화권에 대한 위성 어셈블리를 찾으려면 파일 경로 집합을 생성합니다.
각 경로에 대해 PLATFORM_RESOURCE_ROOTS
및 APP_PATHS
후에, CultureInfo.Name 문자열, 디렉토리 구분 기호, AssemblyName.Name 문자열, 그리고 확장명 '.dll'을 추가합니다.
일치하는 파일이 있으면 로드하고 반환합니다.
관리되지 않는(네이티브) 라이브러리 검색
런타임의 관리되지 않는 라이브러리 검색 알고리즘은 모든 플랫폼에서 동일합니다. 그러나 관리되지 않는 라이브러리의 실제 로드는 기본 플랫폼에서 수행되므로 관찰된 동작은 약간 다를 수 있습니다.
제공된 라이브러리 이름이 절대 경로 또는 상대 경로를 나타내는지 확인합니다.
이름이 절대 경로를 나타내는 경우 모든 후속 작업에 직접 이름을 사용합니다. 그렇지 않으면 이름을 사용하여 플랫폼에서 정의한 조합을 고려하십시오. 조합은 플랫폼별 접두사(예:
lib
) 및/또는 접미사(예:.dll
,.dylib
및.so
)로 구성됩니다. 이 목록은 전체 목록이 아니며 각 플랫폼에서 수행된 정확한 노력을 나타내지 않습니다. 이는 고려되는 항목의 예일 뿐입니다. 자세한 내용은 네이티브 라이브러리 로드를 참조하세요.이름 및 경로가 상대적인 경우 각 조합은 다음 단계에서 사용됩니다. 첫 번째 성공적인 로드 시도는 로드된 라이브러리에 핸들을 즉시 반환합니다.
속성에 제공된 각 경로에
NATIVE_DLL_SEARCH_DIRECTORIES
추가하고 로드를 시도합니다.DefaultDllImportSearchPathsAttribute이 호출 어셈블리 또는 p/invoke에서 정의되지 않았거나 정의되어
DllImportSearchPath.AssemblyDirectory
을 포함하는 경우, 이름 또는 조합을 호출 어셈블리의 디렉터리에 추가하고 로드를 시도합니다.라이브러리를 직접 로드하는 데 사용합니다.
라이브러리를 로드하지 못했음을 나타냅니다.
.NET