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.Personal 和 Environment.SpecialFolder.MyDocuments 是同一基础枚举值的别名。 如果以这种方式使用 Environment.SpecialFolder.Personal,请将代码更改为传递 Environment.SpecialFolder.UserProfile(而不是 Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
)。
对于其他中断,建议执行以下操作之一:
- 将应用程序的文件迁移到相应的目录。
- 将上一位置的回退检查添加到代码中。