2010-03-19 11 views
28

Ho creato un'applicazione che utilizza settings.settings per memorizzare alcune impostazioni specifiche dell'utente (scope = Utente). Le impostazioni sono caricate correttamente all'avvio, modificate durante l'uso e salvate correttamente per il prossimo avvio. Questo ciclo sembra non avere problemi.Come mantenere le modifiche in un file .settings/.config attraverso una modifica della versione del file?

Il problema si presenta quando aggiorno le versioni di assembly e file per una nuova build. Le impostazioni non vengono più caricate all'avvio (vengono invece utilizzati i valori predefiniti). Sembra anche che un file di configurazione salvato dalla versione 1.1 continui anche se viene lanciata la versione 1.2 e un nuovo file di configurazione viene generato e salvato (ovvero puoi riavviare la versione 1.1 e il file di configurazione sarà il file di configurazione che è stato salvato da quella versione).

Quindi sembra che le impostazioni siano specifiche per la versione dell'assieme e/o del file. Vale anche la pena notare che tra la versione 1.1 e la versione 1.2 non ci sono state modifiche al file settings.settings o qualsiasi altra cosa (cioè, l'unica modifica che ho fatto tra queste diverse build è stata la modifica dei numeri di versione).

C'è un modo per mantenere queste impostazioni tra le modifiche di versione?

+0

[Mantenimento delle impostazioni tra gli aggiornamenti] (https://stackoverflow.com/questions/534261/how-do-you-keep-user-config-settings-across-different-assembly-versions-in-net/534335# 534335) può essere un'altra sfida quando si utilizza la classe .Net Settings. Il link all'inizio di questo post ha la risposta. –

+0

Ho postato una possibile soluzione in [questo thread] (https://stackoverflow.com/a/47921377/3223783). Spero possa aiutare! – dontbyteme

+0

Ho pubblicato una possibile soluzione nella seguente discussione: https://stackoverflow.com/a/47921377/3223783 Speranza che aiuti! – dontbyteme

risposta

18

Markus Olsson ha già dato una bella risposta here.

In sostanza, è necessario utilizzare il metodo ApplicationSettingsBase.Upgrade().

+0

Grazie per l'informazione !! Ora è compilato, testato, funziona come previsto e ora completamente integrato nel progetto !! Ti assegnerò la taglia quando posso (a quanto pare devo aspettare per accettare questa risposta - dovrebbe essere più tardi, oggi o domani). : D – InvertedAcceleration

1

Spero che qualcun altro abbia una risposta migliore. Ho avuto questa domanda qualche anno fa e l'unica soluzione che ho trovato (che funzionava) era quella di utilizzare il mio meccanismo per la memorizzazione delle impostazioni, piuttosto che il modo predefinito predefinito di .NET.

+0

Grazie per aver scheggiato la tua esperienza ... Sono sconvolto Non ho una risposta in questo momento che sia semplice e diretta (sia attraverso SO che io cercando di rispondere a me stesso nei documenti). Mi sta portando a credere che non sia possibile ...che è pazzesco per quella che sembra una grande funzione di risparmio di tempo da rendere quasi completamente inutile per la stragrande maggioranza dei progetti. – InvertedAcceleration

41

Alcuni chiarimenti:

Devi chiamare il metodo Upgrade di ApplicationSettingsBase classe derivata (che viene normalmente chiamato Settings ed è stato creato per voi da Visual Studio):

Properties.Settings.Default.Upgrade(); 

Quando/dove chiamare il metodo Upgrade? È possibile applicare un semplice trucco: definire un'impostazione utente denominata UpgradeRequired (esempio) come bool (il modo più semplice è tramite IDE). Assicurati che il suo valore predefinito sia true.

Inserisci questo codice snipped all'inizio dell'applicazione:

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

Quindi il metodo di aggiornamento sarà chiamato solo dopo la versione cambia e solo una volta (da quando si disattiva ulteriori aggiornamenti impostando UpgradeRequired = false fino a quando una versione cambia - quando la proprietà recupera il valore predefinito di true).

+2

Invece di/in aggiunta a 'UpgradeRequired', memorizzerei la versione dell'app come impostazione. Ciò consente di eseguire conversioni di aggiornamento personalizzate (vale a dire, di un valore non valido/valore valido diverso dal valore predefinito/-some dell'ultima versione). È possibile avere un codice che converte ogni versione applicabile che richiede la conversione alla versione successiva più bassa che lo richiede e collega a catena il codice in tal modo: a) riducendo la complessità del codice di conversione dell'ultima versione eb) consentendo il ritiro del vecchio codice di conversione. – Tom

Problemi correlati