Mitigação: normalização do caminho
A partir dos aplicativos direcionados ao .NET Framework 4.6.2, a normalização do caminho no .NET Framework foi alterada.
O que é normalização do 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. Normalmente, a normalização envolve:
Padronização de separadores de diretório e componente.
Aplicação do diretório atual a um caminho relativo.
Avaliação do diretório relativo (
.
) ou do diretório pai (..
) em um caminho.Remoção de determinados caracteres.
As alterações
Começando com os aplicativos direcionados ao .NET Framework 4.6.2, a normalização do caminho foi alterada nos seguintes aspectos:
O runtime atende à função GetFullPathName do sistema operacional para normalizar caminhos.
A normalização não envolve mais a remoção do fim dos segmentos do diretório (como um espaço no fim do nome de um diretório).
Suporte à sintaxe do caminho do dispositivo em confiança total, incluindo
\\.\
e, para APIs de E/S de arquivo em mscorlib.dll,\\?\
.O runtime não valida caminhos de sintaxe do dispositivo.
Há suporte ao uso da sintaxe de dispositivo para acessar fluxos de dados alternados.
Impacto
Para os aplicativos direcionados ao .NET Framework 4.6.2 ou posterior, essas alterações estão ativadas por padrão. Elas devem melhorar o desempenho e ao mesmo tempo permitir que os métodos acessem caminhos anteriormente inacessíveis.
Os aplicativos direcionados ao .NET Framework 4.6.1 e versões anteriores, mas que são executados no .NET Framework 4.6.2 ou posteriores, não são afetados por essa alteração.
Atenuação
Os aplicativos direcionados ao .NET Framework 4.6.2 ou posterior podem recusar essa alteração e usar a normalização herdada adicionando o seguinte à seção <runtime> do arquivo de configuração de aplicativo:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>
Os aplicativos direcionados ao .NET Framework 4.6.1 ou anterior, mas que são executados no .NET Framework 4.6.2 ou posterior podem habilitar as alterações na normalização do caminho adicionando a seguinte linha à seção <runtime> do arquivo de configuração de aplicativo:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>