none
vshost.exe.config lädt nicht die korrekten Configs RRS feed

  • Frage

  • Hallo zusammen!

     

    Ich arbeite zum ersten mal mit AppConfigs.

    Ich speichere in der app.config die Pfade ab, wo bestimmte Files die meine Applikation erzeugt, gespeichert werden. Wenn ich nach Beenden meiner Applikation diese wieder starte, müssen diese Pfade wieder gefunden werden. Wenn ich die app.config aber wieder auslese, steht nichts mehr drin. Das Abspeichern und wieder lesen müsste aber grundsätzlich funktionieren. 

    Ich habe herausgefunden, dass beim Debugen die Config in der meineApplikation.vshost.exe.config abgelegt wird. Diese wird auch geschrieben, nur nicht dauerhaft gespeichert.

    Weiter habe ich herausgefunden, dass wenn ich nicht debuge sondern die meine Applikation direkt über das exe file aus meinem directory heraus starte, die Config nicht in meineApplikation.vshost.exe.config gespeichert wird, sondern in meineApplikation.exe.config. Habe ich das einmal so gemacht, habe ich gemerkt, dass bei einem erneuten Versuch zu debugen von meineApplikation.exe.config die Config in die meineApplikation.vshost.exe.config geladen wird.

    Macht das für jemanden Sinn, was ich da geschildert habe? :) Das Problem ist, dass das debugen so extrem umständlich ist.

    Die Config schreibe und lese ich über die Methoden der folgenden Klasse, die ich mir zu diesem Zweck geschrieben hab:

        public class ConfigurationHelper
        {
            public static String ReadAppSettingsKey(String aKey)
            {
                try
                {
                    ConfigurationManager.RefreshSection("appSettings");
                }
                catch
                { 
                }
                return ConfigurationManager.AppSettings[aKey];
            }
            public static void WriteAppSettingsKey(String aKey, String aValue)
            {
                try
                {
                    System.Configuration.Configuration aConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                    if (ReadAppSettingsKey(aKey) == null)// || ReadAppSettingsKey(aKey).Equals(""))
                    {
                        //ConfigurationManager.AppSettings.Add(aKey, aValue);
                        aConfig.AppSettings.Settings.Add(aKey, aValue);
                    }
                    else
                    {
                        //ConfigurationManager.AppSettings[aKey] = aValue;
                        //ConfigurationManager.AppSettings.Set(aKey, aValue);
                        aConfig.AppSettings.Settings[aKey].Value = aValue;
                    }
                    aConfig.Save(ConfigurationSaveMode.Modified);
                    ConfigurationManager.RefreshSection("appSettings");
                }
                catch { }
            }
        }
    

    Ich bin mit meinem Latein langsam am Ende und wäre echt froh über Hilfe. Über google und msdn hab ich auch nichts schlaues herausgefunden.

    Danke

    Freitag, 4. November 2011 11:57

Antworten

  • Hallo,

    das Problem ist alleine schon, dass die app.config nicht dazu gedacht ist Einstellungen zu speichern, die zur Laufzeit geändert werden. Meist liegt die app.config (app.exe.config) in einem Verzeichnis, wo der normale Benutzer i.d.R. nicht schreiben darf (bsp. "C:\Programme"). Ferner wird die app.config bei jedem Kompilieren/Debuggen neu geschrieben und damit sind Deine Änderungen futsch. Lege Deine Einstellungen daher besser als Benutzereinstellung an, diese werden automatisch im Profil des aktuellen Benutzers gespeichert:

    Verwenden von Anwendungseinstellungen und Benutzereinstellungen
    http://msdn.microsoft.com/de-de/library/bb397750.aspx

    Wenn Du Einstellungen verwalten möchtest, die für alle Benutzer eines Rechners gültig sind, solltest Du in Erwägung ziehen, diese Einstellungen im Rahmen des Anwendungssetups in der Anwendungskonfiguration zu speichern.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Freitag, 4. November 2011 17:50
    Beantworter

Alle Antworten

  • Hallo,

    das Problem ist alleine schon, dass die app.config nicht dazu gedacht ist Einstellungen zu speichern, die zur Laufzeit geändert werden. Meist liegt die app.config (app.exe.config) in einem Verzeichnis, wo der normale Benutzer i.d.R. nicht schreiben darf (bsp. "C:\Programme"). Ferner wird die app.config bei jedem Kompilieren/Debuggen neu geschrieben und damit sind Deine Änderungen futsch. Lege Deine Einstellungen daher besser als Benutzereinstellung an, diese werden automatisch im Profil des aktuellen Benutzers gespeichert:

    Verwenden von Anwendungseinstellungen und Benutzereinstellungen
    http://msdn.microsoft.com/de-de/library/bb397750.aspx

    Wenn Du Einstellungen verwalten möchtest, die für alle Benutzer eines Rechners gültig sind, solltest Du in Erwägung ziehen, diese Einstellungen im Rahmen des Anwendungssetups in der Anwendungskonfiguration zu speichern.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Freitag, 4. November 2011 17:50
    Beantworter
  • Hallo Angelo1982,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Montag, 14. November 2011 16:16
    Moderator