GetFolderPath-beteende i Unix
Från och med .NET 8 har beteendet Environment.GetFolderPath för unix-operativsystem ändrats.
Ändra beskrivning
Följande tabeller visar hur det returnerade sökvägsvärdet ändras för varje Unix-operativsystem för olika särskilda mappar.
Linux
SpecialFolder-värde | Sökväg (.NET 7 och tidigare) | Sökväg (.NET 8 och senare) |
---|---|---|
MyDocuments |
$HOME |
Använder XDG_DOCUMENTS_DIR om tillgängligt; annars $HOME/Documents |
Personal |
$HOME |
Använder XDG_DOCUMENTS_DIR om tillgängligt; annars $HOME/Documents |
macOS
SpecialFolder-värde | Sökväg (.NET 7 och tidigare) | Sökväg (.NET 8 och senare) |
---|---|---|
MyDocuments |
$HOME |
NSDocumentDirectory ($HOME/Documents ) |
Personal |
$HOME |
NSDocumentDirectory ($HOME/Documents ) |
ApplicationData |
$HOME/.config |
NSApplicationSupportDirectory (bibliotek/programsupport) |
LocalApplicationData |
$HOME/.local/share |
NSApplicationSupportDirectory (bibliotek/programsupport) |
MyVideos |
$HOME/Videos |
NSMoviesDirectory ($HOME/Movies ) |
Android
SpecialFolder-värde | Sökväg (.NET 7 och tidigare) | Sökväg (.NET 8 och senare) |
---|---|---|
MyDocuments |
$HOME |
$HOME/Documents |
Personal |
$HOME |
$HOME/Documents |
Version introducerad
Förhandsversion 1 av .NET 8
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Det tidigare beteendet var felaktigt och uppfyllde inte användarnas förväntningar på Linux, macOS och Android.
Rekommenderad åtgärd
Den vanligaste pausen $HOME
är om du skickar System.Environment.SpecialFolder.Personal till Environment.GetFolderPath(Environment+SpecialFolder) Unix för att hämta katalogen (Environment.GetFolderPath(Environment.SpecialFolder.Personal)
). Environment.SpecialFolder.Personal och Environment.SpecialFolder.MyDocuments är alias för samma underliggande uppräkningsvärde. Om du använder Environment.SpecialFolder.Personal på det här sättet ändrar du koden så att den skickas Environment.SpecialFolder.UserProfile i stället (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
).
För andra pauser är den rekommenderade åtgärden att göra något av följande:
- Migrera programmets filer till rätt katalog.
- Lägg till en reservkontroll för den tidigare platsen i koden.