Unix 檔案路徑中的反斜線對應
反斜線 (\
) 字元在 Unix 上的目錄和檔案名中有效。 從 .NET 8 開始,原生 CoreCLR 執行階段不會再將 \
字元轉換成 Unix 上的目錄分隔符號 - 正斜線 (/
)。 這項變更可讓 .NET 應用程式位於名稱包含反斜線字元的路徑上。 也允許原生執行階段、dotnet
主機和 ilasm
和 ildasm
工具存取包含反斜線字元的路徑上檔案。
先前的行為
原生 CoreCLR 執行階段會自動將檔案路徑中的反斜線 (\
) 字元轉換為 Unix 上的正斜線 (/
)。
新的行為
原生 CoreCLR 執行階段不會轉換 Unix 上的任何檔案路徑字元。
導入的版本
.NET 8 Preview 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)