Description
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
- Binary incompatible: Existing binaries may encounter a breaking change in behavior, such as failure to load/execute or different run-time behavior.
- Source incompatible: Source code may encounter a breaking change in behavior when targeting the new runtime/component/SDK, such as compile errors or different run-time behavior.
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
propertySystem.Runtime.InteropServices.NativeLibrary
classLoad
method - all overloadsTryLoad
method - all overloads
System.Reflection.Assembly
classLoadFrom
LoadFile
UnsafeLoadFrom
System.Runtime.Loader.AssemblyLoadContext
LoadFromAssemblyPath
LoadFromNativeImagePath
LoadUnmanagedDllFromPath
- Various
DOTNET_xxx
configuration variables that contain file paths - File paths passed to the
ilasm
andildasm
tools - File paths passed to the
dotnet
host