.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/Invokes DefaultDllImportSearchPathsAttribute を使用する
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad
こちらも参照ください
.NET