Fügen Sie app.config Werte hinzu und rufen Sie sie ab


75

Ich muss Schlüsselwertpaare wie folgt in app.Config einfügen:

<configuration>
 <appSettings>
    <add key="Setting1" value="Value1" />
    <add key="Setting2" value="Value2" />
 </appSettings>
</configuration>

Als ich in Google gesucht habe, habe ich das folgende Code-Snippet erhalten

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Add an Application Setting.

config.AppSettings.Settings.Add("ModificationDate",
               DateTime.Now.ToLongTimeString() + " ");

// Save the changes in App.config file.

config.Save(ConfigurationSaveMode.Modified);

Der obige Code funktioniert nicht, da ConfigurationManager nicht im System.Configuration-Namespace gefunden wird, den ich .NET 2.0 verwende. Wie füge ich Schlüssel-Wert-Paare programmgesteuert zu app.Config hinzu und rufe sie ab?


6
Nur ein Hinweis für alle, die dies lesen: config.Save (ConfigurationSaveMode.Modified) speichert den Wert nur, wenn der Schlüssel in der Datei app.config vordefiniert ist. Um tatsächlich eine neue zu erstellen, müssen Sie nur config.Save () ohne Parameter verwenden.
Ryanulit

Antworten:


53

Fehlt Ihnen der Verweis auf System.Configuration.dll? ConfigurationManagerKlasse liegt da.

BEARBEITEN: Der System.ConfigurationNamespace hat Klassen in mscorlib.dll, system.dll und in system.configuration.dll. Ihr Projekt enthält immer die Referenzen mscorlib.dll und system.dll, aber system.configuration.dll muss zu den meisten Projekttypen hinzugefügt werden, da es standardmäßig nicht vorhanden ist ...


2
Das bringt mich manchmal! Ich denke immer wieder, dass alles, was ich brauche, eine Verwendung ist :(
crashmstr

12

Das funktioniert:

public static void AddValue(string key, string value)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Add(key, value);
    config.Save(ConfigurationSaveMode.Minimal);
}

3
Wenn Sie auf diesen Wert zugreifen möchten, den Sie später im Code hinzugefügt haben, ohne Ihre Anwendung neu zu starten, müssen Sie danach aufrufen ConfigurationManager.RefreshSection("appSettings");.
propagiert

Sie können es Assembly.GetExecutingAssembly().Locationanstelle von verwenden, Application.ExecutablePathwenn Sie es in einer Konsolenanwendung ausführen . Sie können sich auch Surajs Antwort ansehen .
AlexMelw

9

Wenn Sie einen Verweis auf hinzufügen System.Configuration, erhalten Sie einen Teil des Konfigurationsnamespace, indem Sie auf den Systemnamespace verweisen und den Verweis auf System hinzufügen. Die Konfiguration sollte Ihnen den Zugriff ermöglichen ConfigurationManager.


5

Ich hoffe das funktioniert:

System.Configuration.Configuration config= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.AppSettings.Settings["Yourkey"].Value = "YourValue";
config.Save(ConfigurationSaveMode.Modified);

3

So rufen Sie die Daten aus der App.config ab

Denken Sie daran, dass Sie:

  1. Zu den Referenzen hinzugefügt -> System.Configuration
  2. und fügte dies auch mit Anweisung -> hinzu using System.Configuration;

Mach das einfach

string value1 = ConfigurationManager.AppSettings["Value1"];

Alternativ können Sie dies in einer Zeile erreichen, wenn Sie nicht using System.Configuration;explizit hinzufügen möchten .

string value1 = System.Configuration.ConfigurationManager.AppSettings["Value1"]

0

Entschuldigung für die späte Antwort, aber möglicherweise hilft mein Code Ihnen.

Ich habe 3 Knöpfe auf der Winform-Oberfläche platziert. Taste1 & 2 stellen einen anderen Wert ein und Taste3 ruft den aktuellen Wert ab. Wenn Sie also zuerst meinen Code ausführen, fügen Sie die Referenz System.configuration hinzu

Klicken Sie auf die erste Schaltfläche und dann auf die dritte Schaltfläche, um zu sehen, welcher Wert eingestellt wurde. Klicken Sie das nächste Mal erneut auf die zweite und dritte Schaltfläche, um erneut zu sehen, welcher Wert nach der Änderung eingestellt wurde.

Also hier ist der Code.

using System.Configuration;

 private void button1_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Remove("DBServerName");
    config.AppSettings.Settings.Add("DBServerName", "FirstAddedValue1");
    config.Save(ConfigurationSaveMode.Modified);
}

private void button2_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Remove("DBServerName");
    config.AppSettings.Settings.Add("DBServerName", "SecondAddedValue1");
    config.Save(ConfigurationSaveMode.Modified);
}

private void button3_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
          MessageBox.Show(config.AppSettings.Settings["DBServerName"].Value);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.