none
Ein Objekt in die App.config schreiben RRS feed

  • Frage

  • Hallo,
    ist es möglich, eine instanziierte Klasse in einen Rutsch in die App.config zu schreiben?

    public partial class Form1 : Form
    {
       public Form1()
       {
          Person p = new Person { Alter = 30, Name = "Hansen", Vorname = "Hans" };
    
          // SpeichereInDieConfig(p);	
       }
    }
    
    public class Person
    {
       public string Name { get; set; }
       public string Vorname { get; set; }
       public int Alter { get; set; }
    }
    Freitag, 18. Dezember 2009 10:07

Antworten

  • Hallo Sven,

    in der app.config werden statische Werte während der Entwicklung, maximal noch während des Setups festgelegt. Defaultwerte für die spätere Ausführung bspw. Zur Laufzeit kannst Du diese Werte i.d.R. nicht ändern, da die meisten Benutzer allein keine Schreibrechte auf das Programmverzeichnis haben, wo Deine Anwendung und die app.config im Normalfall installiert würde. Daher ist es nicht sinnvoll, dort Einstellunge speichern zu wollen.

    Statt dessen böten sich die Usersettings für Dein Vorhaben. Diese werden by default für den aktuellen Benutzer gespeichert und können zur Laufzeit geändert werden. Eine weitere Alternative wären die Serialisierungsmethoden des .NET Framework, wie XmlSerializer, Soap- od. BinaryFormatter.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Freitag, 18. Dezember 2009 12:10
    Beantworter
  • Hallo Sven,

    an die Benutzereinstellungen kommst Du via:
    using System.Configuration;
    
    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
    
    Danach müsstest Du sie als Xml-Datei verarbeiten oder über die Configuration selbst.
    Einiges dazu steht beim ConfigurationManager

    Gruß Elmar
    Dienstag, 22. Dezember 2009 18:38
    Beantworter
  • Hallo Sven,

    Du kannst auch über die ApplicationSettings gehen, ohne Dich mit dem Aufbau der Konfigurationsdatei beschäftigen zu müssen, wie es beim ConfigurationManager der Fall wäre.

    Unter Projekt => Eigenschaften wechselst Du in die Ansicht "Settings" und legst eine neue Einstellung fest. Nenne sie bspw. "PersonInfo", wähle in der Spalte "Type" aus der Auswahlliste "Durchsuchen.." und gebe den voll qualifizierten Bezeichner Deiner Person Klasse an. Beispiel: "WindowsFormsApplication1.Person" und bestätige mit OK. Das Projekt muss dazu einmal kompiliert sein, sonst wird der Typ nicht gefunden. In der Spalte "Scope", legst Du "User" fest.

    Nachfolgend die Verwendung dieser Setting:

    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          if (Properties.Settings.Default.PersonInfo != null)
          {
            MessageBox.Show(Properties.Settings.Default.PersonInfo.ToString());
          }
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          Person personInfo = new Person();
    
          personInfo.Alter = 88;
          personInfo.Name = "User";
          personInfo.Vorname = "Test";
    
          Properties.Settings.Default.PersonInfo = personInfo;
          Properties.Settings.Default.Save();
        }
      }
    
      public class Person
      {
        public string Name { get; set; }
        public string Vorname { get; set; }
        public int Alter { get; set; }
    
        public override string ToString()
        {
          return String.Format("{0} {1}, Alter {2}", this.Vorname, this.Name, this.Alter);
        }
      }
    }
    

    Die "user.Config" wird in den lokalen Anwendungsdaten des aktuellen Benutzer abgelegt. Der Aufbau dieser Datei ist ähnlich der "app.config".
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Dienstag, 22. Dezember 2009 20:17
    Beantworter

Alle Antworten

  • Hallo Sven,

    in der app.config werden statische Werte während der Entwicklung, maximal noch während des Setups festgelegt. Defaultwerte für die spätere Ausführung bspw. Zur Laufzeit kannst Du diese Werte i.d.R. nicht ändern, da die meisten Benutzer allein keine Schreibrechte auf das Programmverzeichnis haben, wo Deine Anwendung und die app.config im Normalfall installiert würde. Daher ist es nicht sinnvoll, dort Einstellunge speichern zu wollen.

    Statt dessen böten sich die Usersettings für Dein Vorhaben. Diese werden by default für den aktuellen Benutzer gespeichert und können zur Laufzeit geändert werden. Eine weitere Alternative wären die Serialisierungsmethoden des .NET Framework, wie XmlSerializer, Soap- od. BinaryFormatter.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Freitag, 18. Dezember 2009 12:10
    Beantworter
  • Würde die Usersettings in eine Datei ähnlich der App.config gespeichern?
    Und wenn ja, wie bekomme ich mein obiges Problem damit gelöst?
    Wie gehe ich da vor? Mit dem ConfigurationManager komme ich scheinbar nicht an die Datei, oder doch?

    Gruß Sven
    Dienstag, 22. Dezember 2009 13:45
  • Hallo Sven,

    an die Benutzereinstellungen kommst Du via:
    using System.Configuration;
    
    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
    
    Danach müsstest Du sie als Xml-Datei verarbeiten oder über die Configuration selbst.
    Einiges dazu steht beim ConfigurationManager

    Gruß Elmar
    Dienstag, 22. Dezember 2009 18:38
    Beantworter
  • Hallo Sven,

    Du kannst auch über die ApplicationSettings gehen, ohne Dich mit dem Aufbau der Konfigurationsdatei beschäftigen zu müssen, wie es beim ConfigurationManager der Fall wäre.

    Unter Projekt => Eigenschaften wechselst Du in die Ansicht "Settings" und legst eine neue Einstellung fest. Nenne sie bspw. "PersonInfo", wähle in der Spalte "Type" aus der Auswahlliste "Durchsuchen.." und gebe den voll qualifizierten Bezeichner Deiner Person Klasse an. Beispiel: "WindowsFormsApplication1.Person" und bestätige mit OK. Das Projekt muss dazu einmal kompiliert sein, sonst wird der Typ nicht gefunden. In der Spalte "Scope", legst Du "User" fest.

    Nachfolgend die Verwendung dieser Setting:

    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          if (Properties.Settings.Default.PersonInfo != null)
          {
            MessageBox.Show(Properties.Settings.Default.PersonInfo.ToString());
          }
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          Person personInfo = new Person();
    
          personInfo.Alter = 88;
          personInfo.Name = "User";
          personInfo.Vorname = "Test";
    
          Properties.Settings.Default.PersonInfo = personInfo;
          Properties.Settings.Default.Save();
        }
      }
    
      public class Person
      {
        public string Name { get; set; }
        public string Vorname { get; set; }
        public int Alter { get; set; }
    
        public override string ToString()
        {
          return String.Format("{0} {1}, Alter {2}", this.Vorname, this.Name, this.Alter);
        }
      }
    }
    

    Die "user.Config" wird in den lokalen Anwendungsdaten des aktuellen Benutzer abgelegt. Der Aufbau dieser Datei ist ähnlich der "app.config".
    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Dienstag, 22. Dezember 2009 20:17
    Beantworter
  • Hallo Sven,

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

    Grüße,
    Robert

    Montag, 28. Dezember 2009 13:36
    Moderator