共用方式為


緩解:路徑正規化

從以 .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>  

另請參閱