Поведение GetFolderPath в Unix
Начиная с .NET 8 поведение Environment.GetFolderPath операционных систем Unix изменилось.
Описание изменения
В следующих таблицах показано, как изменяется возвращаемое значение пути для каждой операционной системы 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.
Рекомендуемое действие
Наиболее распространенный разрыв заключается в том, что вы передаете System.Environment.SpecialFolder.PersonalEnvironment.GetFolderPath(Environment+SpecialFolder) в Unix, чтобы получить $HOME
каталог (Environment.GetFolderPath(Environment.SpecialFolder.Personal)
). Environment.SpecialFolder.Personal и Environment.SpecialFolder.MyDocuments являются псевдонимами для одного и того же базового значения перечисления. Если вы используете Environment.SpecialFolder.Personal таким образом, измените код, чтобы передать Environment.SpecialFolder.UserProfile вместо него (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
).
Для других разрывов рекомендуется выполнить одно из следующих действий:
- Перенос файлов приложения в соответствующий каталог.
- Добавьте резервную проверка для предыдущего расположения в код.