Compartir a través de


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 la 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 si está disponible; de lo contrario, usa XDG_DOCUMENTS_DIR ; de lo contrario, $HOME/Documents
Personal $HOME Usa si está disponible; de lo contrario, usa XDG_DOCUMENTS_DIR ; de lo contrario, $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)

Androide

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 disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

El comportamiento anterior era incorrecto y no satisface las expectativas del usuario para Linux, macOS y Android.

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 pasarlo Environment.SpecialFolder.UserProfile en su lugar (Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)).

Para otras pausas, se recomienda 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.

Las APIs afectadas