Condividi tramite


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 XDG_DOCUMENTS_DIR, se disponibile; altrimenti $HOME/Documents
Personal $HOME Utilizza XDG_DOCUMENTS_DIR, se disponibile; altrimenti $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)

Androide

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 Preview 1

Tipo di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

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

La rottura più comune si verifica se stai passando 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 il codice per passare Environment.SpecialFolder.UserProfile invece (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.
  • Aggiungi un controllo di fallback per il percorso precedente al tuo codice.

Le API interessate