Asignación de barra diagonal inversa en rutas de acceso de archivos Unix
Los caracteres de barra invertida (\
) son válidos en nombres de directorio y archivo en Unix. A partir de .NET 8, el entorno de ejecución nativo de CoreCLR ya no convierte caracteres \
en separadores de directorios (barras inclinadas (/
)— en Unix. Este cambio permite que las aplicaciones .NET se encuentren en rutas de acceso con nombres que contengan caracteres de barra invertida. También permite que el entorno de ejecución nativo, el host dotnet
y las herramientas ilasm
y ildasm
accedan a los archivos de las rutas de acceso que contienen caracteres de barra invertida.
Comportamiento anterior
El entorno de ejecución de CoreCLR nativo convirtió automáticamente caracteres de barra invertida (\
) en rutas de acceso de archivo a barras inclinadas (/
) en Unix.
Comportamiento nuevo
El entorno de ejecución de CoreCLR nativo no convierte ningún carácter de ruta de acceso de archivo en Unix.
Versión introducida
.NET 8 Preview 1
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Sin este cambio, las aplicaciones .NET ubicadas en directorios que contienen caracteres de barra diagonal invertida no se inician.
Acción recomendada
- Use Path.DirectorySeparatorChar como separador de directorios en la aplicación en lugar de codificarlo de forma rígida en
\
o/
. - Use
/
como separador de directorios en Unix en rutas de acceso de archivo que se pasan al hostdotnet
, las API de hospedaje y las herramientasilasm
yildasm
. - Use
/
como separador de directorios en Unix en rutas de acceso de archivo en diferentes variables de entorno deDOTNET_xxx
.
API afectadas
- API de hospedaje
- System.Runtime.InteropServices.DllImportAttribute.Value
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad
- System.Reflection.Assembly.LoadFrom
- System.Reflection.Assembly.LoadFile
- System.Reflection.Assembly.UnsafeLoadFrom(String)
- System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String)
- System.Runtime.Loader.AssemblyLoadContext.LoadFromNativeImagePath(String, String)
- System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDllFromPath(String)