Udostępnij za pomocą


Zachowanie GetFolderPath w systemie Unix

Począwszy od platformy .NET 8, zachowanie Environment.GetFolderPath w systemach operacyjnych Unix uległo zmianie.

Zmień opis

W poniższych tabelach pokazano, jak zwracana wartość ścieżki zmienia się dla każdego systemu operacyjnego Unix dla różnych folderów specjalnych.

Linuxa

Wartość SpecialFolder Ścieżka (.NET 7 i wcześniejsze) Ścieżka (.NET 8 i późniejsze wersje)
MyDocuments $HOME Używa XDG_DOCUMENTS_DIR jeśli jest dostępne; w innym przypadku $HOME/Documents
Personal $HOME Używa XDG_DOCUMENTS_DIR jeśli jest dostępne; w innym przypadku $HOME/Documents

macOS

Wartość SpecialFolder Ścieżka (.NET 7 i wcześniejsze) Ścieżka (.NET 8 i późniejsze wersje)
MyDocuments $HOME NSDocumentDirectory ($HOME/Documents)
Personal $HOME NSDocumentDirectory ($HOME/Documents)
ApplicationData $HOME/.config NSApplicationSupportDirectory (obsługa biblioteki/aplikacji)
LocalApplicationData $HOME/.local/share NSApplicationSupportDirectory (obsługa biblioteki/aplikacji)
MyVideos $HOME/Videos NSMoviesDirectory ($HOME/Movies)

Android

Wartość SpecialFolder Ścieżka (.NET 7 i wcześniejsze) Ścieżka (.NET 8 i późniejsze wersje)
MyDocuments $HOME $HOME/Documents
Personal $HOME $HOME/Documents

Wersja wprowadzona

.NET 8 (wersja zapoznawcza 1)

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Poprzednie zachowanie było nieprawidłowe i nie spełniało oczekiwań użytkownika dla systemów Linux, macOS i Android.

Najczęstszym błędem jest przekazywanie System.Environment.SpecialFolder.Personal do Environment.GetFolderPath(Environment+SpecialFolder) w systemie Unix, aby uzyskać dostęp do katalogu $HOME (Environment.GetFolderPath(Environment.SpecialFolder.Personal)). Environment.SpecialFolder.Personal i Environment.SpecialFolder.MyDocuments są aliasami dla tej samej bazowej wartości wyliczenia. Jeśli używasz Environment.SpecialFolder.Personal w ten sposób, zmień kod, aby zamiast tego przekazać Environment.SpecialFolder.UserProfile (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)).

W przypadku innych przerw zalecaną akcją jest wykonanie jednej z następujących czynności:

  • Przeprowadź migrację plików aplikacji do odpowiedniego katalogu.
  • Uwzględnij mechanizm awaryjny kontroli poprzedniej lokalizacji w swoim kodzie.

Interfejsy API, których dotyczy problem