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 (Library/Application Support)
LocalApplicationData $HOME/.local/share NSApplicationSupportDirectory (Library/Application Support)
MyVideos $HOME/Videos NSMoviesDirectory ($HOME/Movies)

Android

SpecialFolder 値 パス (.NET 7 以前) パス (.NET 8 以降)
MyDocuments $HOME $HOME/Documents
Personal $HOME $HOME/Documents

導入されたバージョン

.NET 8 Preview 1

破壊的変更の種類

この変更は、動作変更です。

変更理由

以前の動作は不適切であり、Linux、macOS、Android のユーザーの期待を満たしていませんでした。

最も一般的な中断は、Unix で $HOME ディレクトリを取得するために System.Environment.SpecialFolder.PersonalEnvironment.GetFolderPath(Environment+SpecialFolder) に渡す場合です (Environment.GetFolderPath(Environment.SpecialFolder.Personal))。 Environment.SpecialFolder.PersonalEnvironment.SpecialFolder.MyDocuments は、基になる同じ列挙値の別名です。 この方法で Environment.SpecialFolder.Personal を使用している場合は、代わりに Environment.SpecialFolder.UserProfile を渡すようにコードを変更します (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile))。

その他の中断に対する推奨アクションは、次のいずれかの操作を行うことです。

  • アプリケーションのファイルを適切なディレクトリに移行します。
  • 前の場所のフォールバック チェックをコードに追加します。

影響を受ける API