反斜杠 (\) 字符在 Unix 上的目录和文件名中有效。 从 .NET 8 开始,在 Unix 上,本机 CoreCLR 运行时不再将 \ 字符转换为目录分隔符(正斜杠 (/))。 此项更改使 .NET 应用程序能够位于名称包含反斜杠字符的路径上。 它还允许本机运行时、dotnet 主机以及 ilasm 和 ildasm 工具访问其路径包含反斜杠字符的文件。
旧行为
在 Unix 上,本机 CoreCLR 运行时自动将文件路径中的反斜杠 (\) 字符转换为正斜杠 (/)。
新行为
本机 CoreCLR 运行时不会在 Unix 上转换任何文件路径字符。
引入的版本
.NET 8 预览版 1
中断性变更的类型
此更改为行为更改。
更改原因
如果不进行此项更改,位于包含反斜杠字符的目录中的 .NET 应用将无法启动。
建议的操作
- 在应用中将 Path.DirectorySeparatorChar 用作目录分隔符,而不是将其硬编码为
\或/。 - 在传递给
/主机、托管 API 以及dotnet和ilasm工具的 Unix 文件路径中,将ildasm用作目录分隔符。 - 在各种
/DOTNET_xxx中的 Unix 文件路径中,将 用作目录分隔符。
受影响的 API
- 承载 API
- 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)