-
Notifications
You must be signed in to change notification settings - Fork 6.1k
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.ValuepropertySystem.Runtime.InteropServices.NativeLibraryclassLoadmethod - all overloadsTryLoadmethod - all overloads
System.Reflection.AssemblyclassLoadFromLoadFileUnsafeLoadFrom
System.Runtime.Loader.AssemblyLoadContextLoadFromAssemblyPathLoadFromNativeImagePathLoadUnmanagedDllFromPath
- Various
DOTNET_xxxconfiguration variables that contain file paths - File paths passed to the
ilasmandildasmtools - File paths passed to the
dotnethost