Unix 上的 GetFolderPath 行为

从 .NET 8 开始,Unix 操作系统上的 Environment.GetFolderPath 行为已做更改。

更改描述

下表显示了对各种特殊文件夹而言,每个 Unix 操作系统返回的路径值是如何变化的。

Linux

SpecialFolder 值 路径(.NET 7 及更早版本) 路径(.NET 8 及更高版本)
MyDocuments $HOME 如果可用,则使用 XDG_DOCUMENTS_DIR;否则为 $HOME/Documents
Personal $HOME 如果可用,则使用 XDG_DOCUMENTS_DIR;否则为 $HOME/Documents

macOS

SpecialFolder 值 路径(.NET 7 及更早版本) 路径(.NET 8 及更高版本)
MyDocuments $HOME NSDocumentDirectory ($HOME/Documents)
Personal $HOME NSDocumentDirectory ($HOME/Documents)
ApplicationData $HOME/.config NSApplicationSupportDirectory(库/应用程序支持)
LocalApplicationData $HOME/.local/share NSApplicationSupportDirectory(库/应用程序支持)
MyVideos $HOME/Videos NSMoviesDirectory ($HOME/Movies)

Android

SpecialFolder 值 路径(.NET 7 及更早版本) 路径(.NET 8 及更高版本)
MyDocuments $HOME $HOME/Documents
Personal $HOME $HOME/Documents

引入的版本

.NET 8 预览版 1

中断性变更的类型

此更改为行为更改

更改原因

以前的行为不正确,不符合用户对 Linux、macOS 和 Android 的期望。

最常见的中断出现在要在 Unix 上将 System.Environment.SpecialFolder.Personal 传递到 Environment.GetFolderPath(Environment+SpecialFolder) 以获取 $HOME 目录 (Environment.GetFolderPath(Environment.SpecialFolder.Personal)) 的情况下。 Environment.SpecialFolder.PersonalEnvironment.SpecialFolder.MyDocuments 是同一基础枚举值的别名。 如果以这种方式使用 Environment.SpecialFolder.Personal,请将代码更改为传递 Environment.SpecialFolder.UserProfile(而不是 Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))。

对于其他中断,建议执行以下操作之一:

  • 将应用程序的文件迁移到相应的目录。
  • 将上一位置的回退检查添加到代码中。

受影响的 API