Compartilhar via


Especificar DllImportSearchPath.AssemblyDirectory pesquisa apenas o diretório do assembly

A partir do .NET 10, se você especificar DllImportSearchPath.AssemblyDirectory como o único sinalizador de pesquisa, o runtime será pesquisado exclusivamente no diretório do assembly. Essa alteração afeta o comportamento de P/Invokes e da NativeLibrary classe.

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, quando DllImportSearchPath.AssemblyDirectory foi especificado como o único sinalizador de pesquisa, o runtime pesquisou primeiro o diretório do assembly. Se a biblioteca não tiver sido encontrada, ela retornará ao comportamento de pesquisa de biblioteca padrão do sistema operacional.

Por exemplo, com o código a seguir, o runtime pesquisaria o diretório do assembly e, em seguida, retornaria aos caminhos de pesquisa do sistema operacional.

[DllImport("example.dll", DllImportSearchPath = DllImportSearchPath.AssemblyDirectory)]
public static extern void ExampleMethod();

Novo comportamento

A partir do .NET 10, quando DllImportSearchPath.AssemblyDirectory é especificado como o único sinalizador de pesquisa, o runtime pesquisa somente no diretório do assembly. Ele não reverte para o comportamento padrão de pesquisa de bibliotecas do sistema operacional.

O exemplo de código anterior agora pesquisa apenas o diretório do assembly para example.dll. Se a biblioteca não for encontrada lá, uma DllNotFoundException será lançada.

Tipo de mudança disruptiva

Essa é uma mudança comportamental.

Motivo da alteração

O comportamento de fallback ao especificar DllImportSearchPath.AssemblyDirectory causou confusão e foi inconsistente com o design dos sinalizadores de pesquisa. Essa alteração garante clareza e consistência no comportamento.

Se o comportamento de fallback for necessário, evite especificar um valor explícito DllImportSearchPath. Por padrão, quando nenhum sinalizador é especificado, o runtime pesquisa o diretório do assembly e, em seguida, volta para o comportamento de pesquisa de biblioteca padrão do sistema operacional.

Exemplo:

[DllImport("example.dll")]
public static extern void ExampleMethod();

APIs afetadas

Consulte também