Compartir a través de


Mitigación: separador de ruta de acceso ZipArchiveEntry.FullName

A partir de las aplicaciones que tienen como destino .NET Framework 4.6.1, el separador de ruta de acceso usado en la ZipArchiveEntry.FullName propiedad ha cambiado de la barra diagonal inversa ("\") usada en versiones anteriores de .NET Framework a una barra diagonal ("/"). Los System.IO.Compression.ZipArchiveEntry objetos se crean llamando a una de las sobrecargas del método ZipFile.CreateFromDirectory.

Impacto

El cambio trae la implementación de .NET en conformidad con la sección 4.4.17.1 de la Especificación de formato de archivo .ZIP y permite que los archivos ZIP se descompriman en sistemas distintos de Windows.

Descomprimir un archivo ZIP creado por una aplicación destinada a una versión anterior de .NET Framework en sistemas operativos que no son Windows, como MacOS, no puede conservar la estructura de directorios. Por ejemplo, en MacOS, crea un conjunto de archivos cuyo nombre de archivo concatena la ruta de acceso del directorio, junto con cualquier carácter de barra diagonal inversa ("\") y el nombre de archivo. Como resultado, no se conserva la estructura de directorios de archivos descomprimidos.

El impacto de este cambio en archivos .ZIP que se descomprimen en el sistema operativo Windows por las API del espacio de nombres de .NET Framework System.IO debe ser mínimo, ya que estas API pueden manejar sin problema tanto una barra diagonal ("/") como una barra diagonal inversa ("\") como carácter separador de rutas.

Mitigación

Si este comportamiento no es deseable, puede optar por no participar añadiendo una configuración en la sección <runtime> del archivo de configuración de la aplicación. A continuación se muestran tanto la sección <runtime> como el interruptor de exclusión.

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

Además, las aplicaciones destinadas a versiones anteriores de .NET Framework, pero que se ejecutan en .NET Framework 4.6.1 y versiones posteriores, pueden optar por este comportamiento agregando una configuración a la <sección runtime> del archivo de configuración de la aplicación. A continuación se muestra la sección <runtime> y el interruptor de suscripción.

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

Consulte también