Ich habe in der letzten Woche das erste Mal mit My.Settings bei einem VB.net-Projekt gearbeitet und finde es eigentlich recht praktisch: Man kann Einstellungen laden und speichern ohne sich selbst um die Datenhaltung zu kümmern.

Jetzt habe ich aber festgestellt, dass die Daten versionsabhängig gespeichert werden. Dass heißt, wenn sich die Versionsnummer eines Projektes ändert, werden die Einstellungen mit den Standardwerten angelegt und die alten Werte nicht automatisch übernommen.

Man kann mit dem Befehl My.Settings.Upgrade() zwar Einstellungen aus vorherigen Versionen übernehmen, muss aber beachte, die aktuellen Einstellungen überschrieben werden. Einfach stur die Upgrade()-Methode beim Programmstart ausführen ist da leider falsch.

Das einfachste ist, wenn man eine Einstellung Upgraded (als Boolean) hinzufügt und standardmäßig auf False setzt. Beim Starten der Anwendung überprüft man ob diese Einstellung auf True gesetzt ist. Wenn nicht, führt man die Methode My.Settings.Upgrade() aus und setzt My.Settings.Upgraded auf True.

So werden die Einstellungen nur beim ersten Start aktualisiert:

If Not My.Settings.Upgraded Then 'Wenn My.Settings noch nicht aktualisiert wurde...
    My.Settings.Upgrade()
    My.Settings.Upgraded = True
End If

P.S.: Die Benutzer-Einstellungen werden übrigens als XML-Dateien in Unterordner im Pfad %LOCALAPPDATA% (z. B. C:\Users\Benutzername\AppData\Local bei Windows 7) gespeichert.