Skip to content

[Breaking change]: Remove file path backslash to slash mapping in CoreCLR native runtime and PAL on Unix #32906

Closed
@janvorli

Description

@janvorli

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 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

Metadata

Metadata

Assignees

Labels

🏁 Release: .NET 8Work items for the .NET 8 release📌 seQUESTeredIdentifies that an issue has been imported into Quest.binary incompatibleExisting binaries may encounter a breaking change in behavior.breaking-changeIndicates a .NET Core breaking changesource incompatibleSource code may encounter a breaking change in behavior when targeting the new version.

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions