Partilhar via


Mitigação: Separador de caminho ZipArchiveEntry.FullName

Começando com aplicativos destinados ao .NET Framework 4.6.1, o ZipArchiveEntry.FullName separador de caminho usado na propriedade foi alterado da barra invertida ("\") usada em versões anteriores do .NET Framework para uma barra ("/"). System.IO.Compression.ZipArchiveEntry Os objetos são criados chamando uma das sobrecargas do ZipFile.CreateFromDirectory método.

Impacto

A alteração coloca a implementação do .NET em conformidade com a seção 4.4.17.1 da Especificação de Formato de Arquivo .ZIP e permite que arquivos .ZIP sejam descompactados em sistemas que não sejam Windows.

A descompactação de um arquivo zip criado por um aplicativo destinado a uma versão anterior do .NET Framework em sistemas operacionais que não sejam Windows, como o MacOS, não consegue preservar a estrutura de diretórios. Por exemplo, no MacOS, ele cria um conjunto de arquivos cujo nome de arquivo concatena o caminho do diretório, quaisquer caracteres de barra invertida ("\") e o nome do arquivo. Como resultado, a estrutura de diretórios de arquivos descompactados não é preservada.

O impacto dessa alteração em arquivos .ZIP que são descompactados no sistema operacional Windows por APIs no namespace do .NET Framework System.IO deve ser mínimo, já que essas APIs podem lidar perfeitamente com uma barra ("/") ou uma barra invertida ("\") como o caractere separador de caminho.

Mitigação

Se esse comportamento for indesejável, você pode desativar adicionando uma definição de configuração à <seção de tempo de execução> do arquivo de configuração do aplicativo. A seguir mostra a <runtime> seção e a opção de exclusão.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />  
</runtime>  

Além disso, os aplicativos destinados a versões anteriores do .NET Framework, mas que estão sendo executados no .NET Framework 4.6.1 e versões posteriores, podem optar por esse comportamento adicionando uma definição de configuração à <seção de tempo de execução> do arquivo de configuração do aplicativo. A seguir mostra a <runtime> seção e a opção de aceitação.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />  
</runtime>  

Consulte também