Поделиться через


Поведение 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)).

Для других разрывов рекомендуется выполнить одно из следующих действий:

  • Перенос файлов приложения в соответствующий каталог.
  • Добавьте резервную проверка для предыдущего расположения в код.

Затронутые API