從以 .NET Framework 4.6.2 為目標的應用程式開始,.NET Framework 中的路徑正規化已變更。
什麼是路徑正規化?
正規化路徑牽涉到修改識別路徑或檔案的字串,使其符合目標作系統的有效路徑。 正規化通常牽涉到︰
規範化元件和目錄分隔符號。
將目前的目錄套用到相對路徑。
評估路徑中的相對目錄 (
.) 或父目錄 (..)。修剪指定的字元。
這些變更
從以 .NET Framework 4.6.2 為目標的應用程式開始,路徑正規化已以下列方式變更:
執行階段會延後至作業系統的 GetFullPathName 函式再進行路徑正規化。
正規化不再涉及修剪目錄區段的結尾 (例如目錄名稱結尾的空格)。
支援完全信任的裝置路徑語法,包括
\\.\以及適用於 mscorlib.dll 中之檔案 I/O API 的\\?\。執行階段不會驗證裝置語法路徑。
支援使用裝置語法存取替代資料流。
影響
針對以 .NET Framework 4.6.2 或更新版本為目標的應用程式,這些變更預設為開啟。 它們應改善效能,同時允許方法存取先前無法存取的路徑。
此變更不會影響以 .NET Framework 4.6.1 和舊版為目標但執行於 .NET Framework 4.6.2 或更新版本下的應用程式。
緩和措施
以 .NET Framework 4.6.2 或更新版本為目標的應用程式可以退出退出這項變更,並將下列內容新增至 <應用程式組態檔的運行> 時間區段,以使用舊版正規化:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>
以 .NET Framework 4.6.1 或更早版本為目標但是在 .NET Framework 4.6.2 或更新版本上執行的應用程式,可以將下列這一行新增至 <應用程式 .configuration 檔的運行> 時間區段,以啟用路徑正規化變更:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>