2010-03-19 14 views
28

He creado una aplicación que usa settings.settings para almacenar algunas configuraciones específicas del usuario (scope = User). La configuración se carga correctamente al inicio, se cambia durante el uso y se guarda correctamente para el próximo lanzamiento. Este ciclo parece no tener problemas.¿Cómo persistir los cambios en un archivo .settings/.config en un cambio de versión de archivo?

El problema surge cuando actualizo el ensamblaje y las versiones de archivo para una compilación nueva. La configuración ya no se carga al inicio (en su lugar se usan los valores predeterminados). También parece que un archivo de configuración guardado desde la versión 1.1 persistirá incluso si se lanza la versión 1.2 y se genera y guarda un NUEVO archivo de configuración (es decir, puede reiniciar la versión 1.1 y el archivo de configuración será el archivo de configuración que se guardó de ese versión).

Parece que la configuración es específica para la versión del conjunto y/o archivo. También vale la pena señalar que entre la versión 1.1 y la versión 1.2 no hubo cambios en el archivo settings.settings ni en ninguna otra cosa (es decir, el único cambio que hice entre estas diferentes compilaciones fue modificar los números de versión).

¿Hay alguna manera de conservar estas configuraciones a través de los cambios de versión?

+0

[Mantener la configuración entre las actualizaciones] (https://stackoverflow.com/questions/534261/how-do-you-keep-user-config-settings-across-different-assembly-versions-in-net/534335# 534335) puede ser otro desafío cuando se utiliza la clase .Net Settings. El enlace al comienzo de esta publicación tiene la respuesta. –

+0

Publiqué una posible solución en [este hilo] (https://stackoverflow.com/a/47921377/3223783). ¡Espero que ayude! – dontbyteme

+0

He publicado una posible solución en el siguiente hilo: https://stackoverflow.com/a/47921377/3223783 ¡Espero que ayude! – dontbyteme

Respuesta

18

Markus Olsson ya ha dado una muy buena respuesta here.

Esencialmente tendrá que utilizar el método ApplicationSettingsBase.Upgrade().

+0

¡Gracias por la información! ¡Ahora está compilado, probado, funcionando como se espera y ahora completamente integrado en el proyecto! Te otorgaré la recompensa cuando pueda (aparentemente tengo que esperar para aceptar esta respuesta, debería ser más tarde hoy o mañana). : D – InvertedAcceleration

1

Espero que alguien más tenga una mejor respuesta. Tuve esta pregunta hace unos años, y la única solución que pude encontrar (que sí funcionó) fue utilizar mi propio mecanismo para almacenar configuraciones, en lugar de la forma .NET predeterminada incorporada.

+0

Gracias por mejorar su experiencia ... Estoy impresionado No tengo una respuesta ahora que sea simple y directa (tanto a través de SO como de mí tratando de responder esto yo mismo en los documentos). Me está llevando a creer que no es posible ...Lo cual es una locura por lo que parece ser una gran característica de ahorro de tiempo que se hace casi completamente inútil para la gran mayoría de los proyectos. – InvertedAcceleration

41

Algunas aclaraciones:

Tienes que llamar al método Upgrade de ApplicationSettingsBase clase derivada (que normalmente se llama Settings y se crea para usted por Visual Studio):

Properties.Settings.Default.Upgrade(); 

Cuándo/dónde llamar al método Upgrade? Hay un truco simple que puede aplicar: defina una configuración de usuario llamada UpgradeRequired (ejemplo) como bool (la manera más fácil es a través de IDE). Asegúrese de que su valor predeterminado sea true.

Inserte el código cortado con tijeras en el inicio de la aplicación:

if (Properties.Settings.Default.UpgradeRequired) 
    { 
     Properties.Settings.Default.Upgrade(); 
     Properties.Settings.Default.UpgradeRequired = false; 
     Properties.Settings.Default.Save(); 
    } 

Así el método de actualización se llamará sólo después de los cambios de versión y de una sola vez (ya que deshabilita más actualizaciones mediante el establecimiento de UpgradeRequired = false hasta una versión cambio - cuando la propiedad recupera el valor predeterminado de true).

+2

En lugar de/además de 'UpgradeRequired', almacenaría la versión de la aplicación como una configuración. Esto le permite realizar conversiones de actualización personalizadas (es decir, de un valor inválido/valor válido a un valor que no sea el valor/-same predeterminado de la última versión). Puede tener un código que convierta cada versión aplicable que requiera conversión a la siguiente versión más baja que lo requiera y conectar el código en conjunto: a) reduciendo la complejidad del código de conversión de la última versión yb) permitiendo el posible retiro del código de conversión anterior. – Tom

Cuestiones relacionadas