Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
Ação recomendada
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
- P/Invoca usando DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad