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 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.

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.

API afectadas