反斜線 (\) 字元在 Unix 上的目錄和檔案名中有效。 從 .NET 8 開始,原生 CoreCLR 執行階段不會再將 \ 字元轉換成 Unix 上的目錄分隔符號 - 正斜線 (/)。 這項變更可讓 .NET 應用程式位於名稱包含反斜線字元的路徑上。 也允許原生執行階段、dotnet 主機和 ilasm 和 ildasm 工具存取包含反斜線字元的路徑上檔案。
先前的行為
原生 CoreCLR 執行階段會自動將檔案路徑中的反斜線 (\) 字元轉換為 Unix 上的正斜線 (/)。
新的行為
原生 CoreCLR 執行階段不會轉換 Unix 上的任何檔案路徑字元。
導入的版本
.NET 8 Preview 1
中斷性變更的類型
此變更為行為變更。
變更原因
如果沒有這項變更,位於包含反斜線字元目錄中的 .NET 應用程式將無法啟動。
建議的動作
- 在應用程式中使用 Path.DirectorySeparatorChar 做為目錄分隔符號,而不是將其硬式編碼為
\或/。 - 在傳遞至
/主機、裝載 API 和dotnet與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)