c# - guardar - recuperar proyecto visual studio
¿Cómo persistir los cambios en un archivo.settings/.config en un cambio de versión de archivo? (3)
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.
El problema surge cuando actualizo el ensamblaje y las versiones de archivo para una nueva compilación. 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).
Por lo tanto, parece que las configuraciones son específicas de la versión del ensamblaje 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 o cualquier otra cosa para ese asunto (es decir, el único cambio que hice entre estas diferentes versiones fue modificar los números de versión).
¿Hay alguna manera de mantener estas configuraciones en los cambios de versión?
Algunas aclaraciones:
Debe llamar al método de Upgrade
de la clase derivada de ApplicationSettingsBase
(que normalmente se llama Settings
y Visual Studio lo crea):
Properties.Settings.Default.Upgrade();
¿Cuándo / dónde llamar al método de 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 este código cortado al inicio de la aplicación:
if (Properties.Settings.Default.UpgradeRequired)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.UpgradeRequired = false;
Properties.Settings.Default.Save();
}
Por lo tanto, se llamará al método de actualización solo después de que la versión cambie y solo una vez (dado que deshabilita más actualizaciones configurando UpgradeRequired = false
hasta que cambie la versión, cuando la propiedad recupere el valor predeterminado de true
).
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.
Markus Olsson ya ha dado una muy buena respuesta aquí .
Básicamente, deberá utilizar el método ApplicationSettingsBase.Upgrade() .