从面向 .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>