次の方法で共有


DllImportSearchPath.AssemblyDirectory を指定すると、アセンブリ ディレクトリのみが検索されます

.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

こちらも参照ください