Description
Backslash (\) characters are valid in directory and file names on Unix. We have stopped converting them to directory separators - forward slashes ('/') on Unix in the native CoreCLR runtime. This enables .NET applications to be located on paths with names containing backslash characters and also allows the native runtime, dotnet host, ilasm and ildasm tools access files on paths containing backslash characters.
Version
.NET 8 Preview 1
Previous behavior
Backslash (\) characters in file paths in the native CoreCLR runtime were automatically converted to forward slashes (/).
New behavior
No character conversion in file paths is done in the native CoreCLR runtime on Unix.
Type of breaking change
Reason for change
Without this change, .NET applications located in directories with paths containing backslash characters fail to start.
Recommended action
Use System.IO.Path.DirectorySeparatorChar as a directory separator in .NET apps instead of hardcoding it to \ or /. Use the / as a directory separator on Unix in file paths passed to the dotnet host, hosting APIs, ilasm and ildasm tools or various DOTNET_xxx configuration variables.
Feature area
Core .NET libraries, Other (please put exact area in description textbox)
Affected APIs
- Hosting APIs
System.Runtime.InteropServices.DllImportAttribute.Value property
System.Runtime.InteropServices.NativeLibrary class
Load method - all overloads
TryLoad method - all overloads
System.Reflection.Assembly class
LoadFrom
LoadFile
UnsafeLoadFrom
System.Runtime.Loader.AssemblyLoadContext
LoadFromAssemblyPath
LoadFromNativeImagePath
LoadUnmanagedDllFromPath
- Various
DOTNET_xxx configuration variables that contain file paths
- File paths passed to the
ilasm and ildasm tools
- File paths passed to the
dotnet host
Associated WorkItem - 61504
Description
Backslash (
\) characters are valid in directory and file names on Unix. We have stopped converting them to directory separators - forward slashes ('/') on Unix in the native CoreCLR runtime. This enables .NET applications to be located on paths with names containing backslash characters and also allows the native runtime,dotnethost,ilasmandildasmtools access files on paths containing backslash characters.Version
.NET 8 Preview 1
Previous behavior
Backslash (
\) characters in file paths in the native CoreCLR runtime were automatically converted to forward slashes (/).New behavior
No character conversion in file paths is done in the native CoreCLR runtime on Unix.
Type of breaking change
Reason for change
Without this change, .NET applications located in directories with paths containing backslash characters fail to start.
Recommended action
Use
System.IO.Path.DirectorySeparatorCharas a directory separator in .NET apps instead of hardcoding it to\or/. Use the/as a directory separator on Unix in file paths passed to thedotnethost, hosting APIs,ilasmandildasmtools or variousDOTNET_xxxconfiguration variables.Feature area
Core .NET libraries, Other (please put exact area in description textbox)
Affected APIs
System.Runtime.InteropServices.DllImportAttribute.ValuepropertySystem.Runtime.InteropServices.NativeLibraryclassLoadmethod - all overloadsTryLoadmethod - all overloadsSystem.Reflection.AssemblyclassLoadFromLoadFileUnsafeLoadFromSystem.Runtime.Loader.AssemblyLoadContextLoadFromAssemblyPathLoadFromNativeImagePathLoadUnmanagedDllFromPathDOTNET_xxxconfiguration variables that contain file pathsilasmandildasmtoolsdotnethostAssociated WorkItem - 61504