Comportamento di GetFolderPath in Unix

A partire da .NET 8, il comportamento di Environment.GetFolderPath nei sistemi operativi Unix è cambiato.

Descrizione delle modifiche

Le tabelle seguenti illustrano come cambia il valore del percorso restituito per ogni sistema operativo Unix per varie cartelle speciali.

Linux

Valore SpecialFolder Percorso (.NET 7 e versioni precedenti) Percorso (.NET 8 e versioni successive)
MyDocuments $HOME Utilizza se XDG_DOCUMENTS_DIR disponibile; in caso contrario, $HOME/Documents
Personal $HOME Utilizza se XDG_DOCUMENTS_DIR disponibile; in caso contrario, $HOME/Documents

macOS

Valore SpecialFolder Percorso (.NET 7 e versioni precedenti) Percorso (.NET 8 e versioni successive)
MyDocuments $HOME NSDocumentDirectory ($HOME/Documents)
Personal $HOME NSDocumentDirectory ($HOME/Documents)
ApplicationData $HOME/.config NSApplicationSupportDirectory (Libreria/Supporto applicazioni)
LocalApplicationData $HOME/.local/share NSApplicationSupportDirectory (Libreria/Supporto applicazioni)
MyVideos $HOME/Videos NSMoviesDirectory ($HOME/Movies)

Android

Valore SpecialFolder Percorso (.NET 7 e versioni precedenti) Percorso (.NET 8 e versioni successive)
MyDocuments $HOME $HOME/Documents
Personal $HOME $HOME/Documents

Versione introdotta

.NET 8 anteprima 1

Tipo di modifica che causa un'interruzione

Questa è una modifica funzionale.

Motivo della modifica

Il comportamento precedente non è corretto e non soddisfa le aspettative degli utenti per Linux, macOS e Android.

L'interruzione più comune è se si passa System.Environment.SpecialFolder.Personal a Environment.GetFolderPath(Environment+SpecialFolder) su Unix per ottenere la directory $HOME (Environment.GetFolderPath(Environment.SpecialFolder.Personal)). Environment.SpecialFolder.Personal e Environment.SpecialFolder.MyDocuments sono alias per lo stesso valore di enumerazione sottostante. Se si usa Environment.SpecialFolder.Personal in questo modo, modificare invece il codice per passare Environment.SpecialFolder.UserProfile (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)).

Per altre interruzioni, l'azione consigliata consiste nell'eseguire una delle operazioni seguenti:

  • Eseguire la migrazione dei file dell'applicazione alla directory appropriata.
  • Aggiungere un controllo di fallback per il percorso precedente al codice.

API interessate