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

安卓

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.Personal 并且 Environment.SpecialFolder.MyDocuments 是同一基础枚举值的别名。 如果以这种方式使用 Environment.SpecialFolder.Personal ,请更改代码以改为传递 Environment.SpecialFolder.UserProfileEnvironment.GetFolderPath(Environment.SpecialFolder.UserProfile))。

对于其他休息,建议的措施是采取以下措施之一:

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

受影响的 API