Mitigación: normalización de la ruta de acceso

A partir de las aplicaciones que tienen como destino .NET Framework 4.6.2, la normalización de la ruta de acceso en .NET Framework ha cambiado.

¿Qué es la normalización de la ruta de acceso?

La normalización de una ruta de acceso implica la modificación de la cadena que identifica a una ruta de acceso o archivo de manera que sea conforme con una ruta de acceso válida en el sistema operativo de destino. La normalización implica normalmente:

  • La canonicalización del componente y los separadores de directorios.

  • La aplicación del directorio actual en una ruta de acceso relativa.

  • La evaluación del directorio relativo (.) o el directorio principal (..) en una ruta de acceso.

  • El recorte de caracteres especificados.

Cambios

A partir de las aplicaciones que tienen como destino .NET Framework 4.6.2, la normalización de la ruta de acceso ha cambiado de las siguientes maneras:

  • El tiempo de ejecución se aplaza para la función GetFullPathName del sistema operativo con el objetivo de normalizar las rutas de acceso.

  • La normalización ya no implica el recorte del final de los segmentos de directorio (como el espacio al final de un nombre de directorio).

  • Compatibilidad de la sintaxis de la ruta de acceso del dispositivo con plena confianza ( incluido \\.\) y, para las API de E/S del archivo en mscorlib.dll, \\?\.

  • El tiempo de ejecución o valida las rutas de acceso de la sintaxis del dispositivo.

  • Es compatible el uso de la sintaxis del dispositivo para obtener acceso a los flujos de datos alternativos.

Impacto

Para las aplicaciones que tienen como destino .NET Framework 4.6.2 o una versión posterior, estos cambios están activados de forma predeterminada. Deben mejorar el rendimiento a la vez que permiten a los métodos obtener acceso a las rutas de acceso a las que no se podía obtener acceso anteriormente.

Las aplicaciones que tienen como destino .NET Framework 4.6.1 y versiones anteriores, pero que se ejecutan en .NET Framework 4.6.2 o posterior, no se ven afectadas por este cambio.

Mitigación

Las aplicaciones que tienen como destino .NET Framework 4.6.2 o una versión posterior pueden optar por no recibir este cambio y usar la normalización heredada agregando lo siguiente a la sección <runtime> del archivo de configuración de la aplicación:

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

Las aplicaciones que tienen como destino .NET Framework 4.6.1 o versiones anteriores, pero que se ejecutan en .NET Framework 4.6.2 o versiones posteriores, pueden habilitar los cambios en la normalización de rutas de acceso agregando la línea siguiente a la sección <runtime> del archivo de configuración de la aplicación:

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

Vea también