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