Partilhar via


Especificando DllImportSearchPath.AssemblyDirectory pesquisa apenas o diretório assembly

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

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, quando DllImportSearchPath.AssemblyDirectory era especificado como o único sinalizador de pesquisa, o tempo de execução pesquisava o diretório assembly primeiro. Se a biblioteca não foi encontrada, ela voltou para o comportamento de pesquisa de biblioteca padrão do sistema operacional.

Por exemplo, com o código a seguir, o tempo de execução pesquisaria o diretório assembly e, em seguida, voltaria para os 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 tempo de execução pesquisa somente no diretório de assemblagem. Ele não retorna ao comportamento de pesquisa de biblioteca padrão do sistema operacional.

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

Tipo de mudança disruptiva

Trata-se de uma mudança de comportamento.

Motivo da mudança

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

Se o comportamento de fallback for necessário, evite especificar um DllImportSearchPath. Por padrão, quando nenhum sinalizador é especificado, o tempo de execução pesquisa o diretório assembly e, em seguida, retorna ao comportamento de pesquisa de biblioteca padrão do sistema operacional.

Exemplo:

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

APIs afetadas

Ver também