.NET 10부터 유일한 검색 플래그로 지정 DllImportSearchPath.AssemblyDirectory 하는 경우 런타임은 어셈블리 디렉터리에서만 검색합니다. 이 변경 내용은 P/Invokes 및 클래스의 동작에 영향을 줍니다 NativeLibrary .
도입된 버전
.NET 10
이전 동작
이전에는 유일한 검색 플래그로 지정되었을 때 DllImportSearchPath.AssemblyDirectory 런타임이 먼저 어셈블리 디렉터리를 검색했습니다. 라이브러리를 찾을 수 없으면 운영 체제의 기본 라이브러리 검색 동작으로 되돌아갔습니다.
예를 들어, 다음 코드를 사용하면 런타임이 어셈블리 디렉터리를 검색한 후, OS 검색 경로를 기본적으로 사용합니다.
[DllImport("example.dll", DllImportSearchPath = DllImportSearchPath.AssemblyDirectory)]
public static extern void ExampleMethod();
새 동작
.NET 10부터 유일한 검색 플래그로 지정된 경우 DllImportSearchPath.AssemblyDirectory 런타임은 어셈블리 디렉터리에서만 검색합니다. 운영 체제의 기본 라이브러리 검색 동작으로 대체 되지 않습니다 .
이전 코드 예제에서는 이제 어셈블리 디렉터리에서 example.dll검색합니다. 라이브러리를 찾을 수 없으면 DllNotFoundException 예외가 발생합니다.
파괴적 변경 유형
이는 동작 변경.
변경 이유
지정 시 DllImportSearchPath.AssemblyDirectory 대체 동작으로 인해 혼동이 발생했으며 검색 플래그 디자인과 일치하지 않았습니다. 이 변경은 동작의 명확성과 일관성을 보장합니다.
권장 작업
대체 동작이 필요한 경우 명시적 DllImportSearchPath을 지정하지 마십시오. 기본적으로 플래그가 지정되지 않은 경우 런타임은 어셈블리 디렉터리를 검색한 다음 운영 체제의 기본 라이브러리 검색 동작으로 돌아갑니다.
예제:
[DllImport("example.dll")]
public static extern void ExampleMethod();
영향을 받는 API
- P/Invoke를 사용하여 DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad
참고하십시오
.NET