Comportamento GetFolderPath no UNIX

Começando no .NET 8, o comportamento de Environment.GetFolderPath nos sistemas operacionais Unix foi alterado.

Descrição das alterações

As tabelas a seguir mostram como o valor do caminho retornado é alterado para cada sistema operacional Unix para diversas pastas especiais.

Linux

Valor de SpecialFolder Caminho (.NET 7 e anteriores) Caminho (.NET 8 e posteriores)
MyDocuments $HOME Usa XDG_DOCUMENTS_DIR se estiver disponível; caso contrário, $HOME/Documents.
Personal $HOME Usa XDG_DOCUMENTS_DIR se estiver disponível; caso contrário, $HOME/Documents.

macOS

Valor de SpecialFolder Caminho (.NET 7 e anteriores) Caminho (.NET 8 e posteriores)
MyDocuments $HOME NSDocumentDirectory ($HOME/Documents)
Personal $HOME NSDocumentDirectory ($HOME/Documents)
ApplicationData $HOME/.config NSApplicationSupportDirectory (Suporte para biblioteca/aplicativo)
LocalApplicationData $HOME/.local/share NSApplicationSupportDirectory (Suporte para biblioteca/aplicativo)
MyVideos $HOME/Videos NSMoviesDirectory ($HOME/Movies)

Android

Valor de SpecialFolder Caminho (.NET 7 e anteriores) Caminho (.NET 8 e posteriores)
MyDocuments $HOME $HOME/Documents
Personal $HOME $HOME/Documents

Versão introduzida

.NET 8 versão prévia 1

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

O comportamento anterior estava incorreto e não atendia às expectativas do usuário para Linux, macOS e Android.

A interrupção mais comum é se você estiver passando System.Environment.SpecialFolder.Personal para Environment.GetFolderPath(Environment+SpecialFolder) no Unix para obter o diretório $HOME (Environment.GetFolderPath(Environment.SpecialFolder.Personal)). Environment.SpecialFolder.Personal e Environment.SpecialFolder.MyDocuments são aliases para o mesmo valor de enumeração subjacente. Se estiver usando Environment.SpecialFolder.Personal dessa forma, altere o código para passar Environment.SpecialFolder.UserProfile em vez disso (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)).

Para outras interrupções, a ação recomendada é fazer um dos seguintes procedimentos:

  • Migre os arquivos do aplicativo para o diretório apropriado.
  • Adicione uma verificação de fallback para o local anterior ao seu código.

APIs afetadas