Comportamiento de GetFolderPath en Unix
A partir de .NET 8, el comportamiento de Environment.GetFolderPath en sistemas operativos Unix ha cambiado.
Descripción del cambio
En las tablas siguientes se muestra cómo cambia el valor de ruta de acceso devuelta para cada sistema operativo Unix para varias carpetas especiales.
Linux
Valor SpecialFolder | Ruta de acceso (.NET 7 y versiones anteriores) | Ruta de acceso (.NET 8 y versiones posteriores) |
---|---|---|
MyDocuments |
$HOME |
Usa XDG_DOCUMENTS_DIR si está disponible; de lo contrario, usa $HOME/Documents . |
Personal |
$HOME |
Usa XDG_DOCUMENTS_DIR si está disponible; de lo contrario, usa $HOME/Documents . |
macOS
Valor SpecialFolder | Ruta de acceso (.NET 7 y versiones anteriores) | Ruta de acceso (.NET 8 y versiones posteriores) |
---|---|---|
MyDocuments |
$HOME |
NSDocumentDirectory ($HOME/Documents ) |
Personal |
$HOME |
NSDocumentDirectory ($HOME/Documents ) |
ApplicationData |
$HOME/.config |
NSApplicationSupportDirectory (compatibilidad con la biblioteca o la aplicación) |
LocalApplicationData |
$HOME/.local/share |
NSApplicationSupportDirectory (compatibilidad con la biblioteca o la aplicación) |
MyVideos |
$HOME/Videos |
NSMoviesDirectory ($HOME/Movies ) |
Android
Valor SpecialFolder | Ruta de acceso (.NET 7 y versiones anteriores) | Ruta de acceso (.NET 8 y versiones posteriores) |
---|---|---|
MyDocuments |
$HOME |
$HOME/Documents |
Personal |
$HOME |
$HOME/Documents |
Versión introducida
.NET 8 Preview 1
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
El comportamiento anterior era incorrecto y no cumplía las expectativas del usuario para Linux, macOS y Android.
Acción recomendada
La interrupción más común es si está pasando System.Environment.SpecialFolder.Personal a Environment.GetFolderPath(Environment+SpecialFolder) en Unix para obtener el directorio $HOME
(Environment.GetFolderPath(Environment.SpecialFolder.Personal)
). Environment.SpecialFolder.Personal y Environment.SpecialFolder.MyDocuments son alias para el mismo valor de enumeración subyacente. Si usa Environment.SpecialFolder.Personal de esta manera, cambie el código para pasar Environment.SpecialFolder.UserProfile en su lugar (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)
).
Para otras interrupciones, la acción recomendada es realizar una de las siguientes acciones:
- Migre los archivos de la aplicación al directorio adecuado.
- Agregue una comprobación de reserva para la ubicación anterior al código.