Partilhar via


Atenuação: Normalização de caminho

Começando com aplicativos destinados ao .NET Framework 4.6.2, a normalização de caminho no .NET Framework foi alterada.

O que é normalização de caminho?

Normalizar um caminho envolve modificar a cadeia de caracteres que identifica um caminho ou arquivo para que ele esteja em conformidade com um caminho válido no sistema operacional de destino. A normalização normalmente envolve:

  • Canonicalização de separadores de componentes e diretórios.

  • Aplicação do diretório atual a um caminho relativo.

  • Avaliando o diretório relativo (.) ou o diretório pai (..) em um caminho.

  • Corte de caracteres especificados.

As mudanças

Começando com aplicativos destinados ao .NET Framework 4.6.2, a normalização de caminho foi alterada das seguintes maneiras:

  • O tempo de execução adia para a função GetFullPathName do sistema operacional para normalizar caminhos.

  • A normalização não envolve mais cortar o final dos segmentos de diretório (como um espaço no final de um nome de diretório).

  • Suporte para sintaxe de caminho de dispositivo em confiança total, incluindo \\.\ e, para APIs de E/S de arquivo em mscorlib.dll, \\?\.

  • O tempo de execução não valida caminhos de sintaxe do dispositivo.

  • O uso da sintaxe do dispositivo para acessar fluxos de dados alternativos é suportado.

Impacto

Para aplicativos destinados ao .NET Framework 4.6.2 ou posterior, essas alterações estão ativadas por padrão. Devem melhorar o desempenho e, ao mesmo tempo, permitir que os métodos acedam a caminhos anteriormente inacessíveis.

Os aplicativos destinados ao .NET Framework 4.6.1 e versões anteriores, mas que estão sendo executados no .NET Framework 4.6.2 ou posterior, não são afetados por essa alteração.

Mitigação

Os aplicativos destinados ao .NET Framework 4.6.2 ou posterior podem desativar essa alteração e usar a normalização herdada adicionando o seguinte à <seção de tempo de execução> do arquivo de configuração do aplicativo:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>  

Os aplicativos destinados ao .NET Framework 4.6.1 ou anterior, mas em execução no .NET Framework 4.6.2 ou posterior, podem habilitar as alterações na normalização de caminho adicionando a seguinte linha à <seção de tempo de execução> do arquivo .configuration do aplicativo:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>  

Consulte também