Einfachste Möglichkeit, eine Konfigurationsdatei in einer Windows Forms C # -Anwendung zu haben

88

Ich bin wirklich neu in .NET und habe immer noch nicht verstanden, wie Konfigurationsdateien funktionieren.

Jedes Mal, wenn ich bei Google danach suche, erhalte ich Ergebnisse zu web.config, aber ich schreibe eine Windows Forms-Anwendung.

Ich habe herausgefunden, dass ich den System.Configuration-Namespace verwenden muss, aber die Dokumentation hilft nicht.

Wie definiere ich, dass meine Konfigurationsdatei XYZ.xml ist? Oder hat es einen "Standard" -Namen für die Konfigurationsdatei? Das habe ich immer noch nicht verstanden.

Wie definiere ich einen neuen Abschnitt? Muss ich wirklich eine Klasse erstellen, die von ConfigurationSection erbt?

Ich möchte nur eine Konfigurationsdatei mit einigen Werten wie diesen haben:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Gibt es eine einfache Möglichkeit, dies zu tun? Können Sie auf einfache Weise erklären, wie man aus / in eine einfache Konfigurationsdatei liest und schreibt?

Fabio Gomes
quelle
1
Was ist Ihre Version von .NET? Für 2.0 und höher gibt es eine sehr nette Art namens Einstellungen.
Thomas
1
@Seven es war ein Tippfehler, aber es könnte bedeuten "Erklären Sie mit einem Beispiel" :)
Fabio Gomes

Antworten:

121

Sie möchten eine App.Config verwenden.

Wenn Sie einem Projekt ein neues Element hinzufügen, wird eine Anwendungskonfigurationsdatei angezeigt. Fügen Sie das hinzu.

Anschließend fügen Sie im Abschnitt Konfiguration / Appsettings Schlüssel hinzu

Mögen:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Greifen Sie auf die Mitglieder zu, indem Sie dies tun

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Dies funktioniert in .NET 2 und höher.

qui
quelle
2
Tatsächlich funktioniert es in allen Versionen von .NET ab Version 1.0. Die neue Klasse in .NET 2.0 ist ConfigurationManager.
Mike Dimmick
4
Ich persönlich verwende die Registerkarte "Einstellungen" in den "Anwendungseigenschaften" (nur ab Framework 2.0), da Visual Studio stark typisierte Eigenschaften für Ihre Einstellungen codiert. Sie können auch "Benutzer" -Einstellungen enthalten, die zur Laufzeit gelesen / geschrieben werden.
Adrian Clark
@ Mike Ja, ich hatte das Gefühl, dass dies der Fall war, aber ich war mir nicht sicher. Ich habe nicht viel mit 1.
qui
26
Beachten Sie, dass das ConfigurationSettingsveraltet ist, verwenden System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF
16
Auch ein Hinweis, um System.Configuration.ConfigurationManagerIhr Projekt zu verwenden, benötigt einen Verweis aufSystem.Configuration.dll
dmeglio
66

Klarstellung früherer Antworten ...

  1. Fügen Sie Ihrem Projekt eine neue Datei hinzu ( HinzufügenNeues ElementAnwendungskonfigurationsdatei )

  2. Die neue Konfigurationsdatei wird im Projektmappen- Explorer als App.Config angezeigt .

  3. Fügen Sie Ihre Einstellungen zu dieser Datei hinzu, indem Sie Folgendes als Vorlage verwenden

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Rufen Sie sie folgendermaßen ab:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Bei der Erstellung enthält Ihr Ausgabeordner eine Datei mit dem Namen <Anordnungsname> .exe.config. Dies ist eine Kopie der App.Config- Datei. Der Entwickler sollte keine weiteren Arbeiten ausführen müssen, um diese Datei zu erstellen.

ZombieSheep
quelle
1
Das war nützlich für mich. Zwei weitere Punkte: Beim Hinzufügen der neuen Datei zum Projekt wurde die Anwendungskonfigurationsdatei gefunden, als ich auf den Knoten Allgemein auf der linken Seite des Dialogfelds geklickt habe. Um die ConfigurationManager-Klasse in meinem Code verwenden zu können, musste ich meinen Referenzen die System.Configuration-DLL hinzufügen.
John Gilmer
28

Nach einem kurzen Lesen der vorherigen Antworten sehen sie korrekt aus, aber es sieht nicht so aus, als hätte jemand die neuen Konfigurationsfunktionen in Visual Studio 2008 erwähnt. Es wird weiterhin app.config verwendet (zur Kompilierungszeit in YourAppName.exe.config kopiert). Es gibt jedoch ein UI-Widget, mit dem Sie Eigenschaften festlegen und deren Typen angeben können. Doppelklicken Sie im Ordner "Eigenschaften" Ihres Projekts auf " Einstellungen ".

Das Beste daran ist, dass der Zugriff auf diese Eigenschaft über Code typsicher ist. Der Compiler erkennt offensichtliche Fehler wie die falsche Eingabe des Eigenschaftsnamens. Auf eine Eigenschaft namens MyConnectionString in app.config wird beispielsweise wie folgt zugegriffen:

string s = Properties.Settings.Default.MyConnectionString;
maxfurni
quelle
Dies war in VS2005 verfügbar.
Greg D
5
Schön, aber es (Projekteigenschaften | Einstellungen) generiert Code, der kompiliert werden muss. Wenn Sie eine Einstellung ändern möchten, müssen Sie dem Kunden neue Binärdateien freigeben.
JohnL4
@ JohnL4 Wenn sich diese Einstellungen im Bereich "Benutzer" befinden, können Sie sie programmgesteuert ändern, z. B.Settings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits
10

Sie sollten eine App.config- Datei erstellen (sehr ähnlich zu web.config ).

Sie sollten mit der rechten Maustaste auf Ihr Projekt klicken, ein neues Element hinzufügen und eine neue "Anwendungskonfigurationsdatei" auswählen .

Stellen Sie sicher, dass Sie mit System.Configuration in Ihrem Projekt hinzufügen.

Dann können Sie Werte hinzufügen:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Nur ein Hinweis: Laut Microsoft sollten Sie ConfigurationManager anstelle von ConfigurationSettings verwenden (siehe Abschnitt "Anmerkungen"):

"Die ConfigurationSettings-Klasse bietet nur Abwärtskompatibilität. Für neue Anwendungen sollten Sie stattdessen die ConfigurationManager-Klasse oder die WebConfigurationManager-Klasse verwenden."

Nathan Koop
quelle
Sehr hilfreich. Ich habe mein Problem mit dem T.
JCMorris am
In Visual Studio 2015: Klicken Sie auf Projekt> Referenz hinzufügen. Scrollen Sie auf halber Strecke nach unten, um System.Configuration zu finden. Klicken Sie auf OK und aktualisieren Sie die Codezeile gemäß Nathans Kommentar.
Robot70
7

Der Standardname für eine Konfigurationsdatei lautet [yourexe] .exe.config. Notepad.exe hat also eine Konfigurationsdatei mit dem Namen notepad.exe.config im selben Ordner wie das Programm. Dies ist eine allgemeine Konfigurationsdatei für alle Aspekte der CLR und des Frameworks. Sie kann jedoch Ihre eigenen Einstellungen unter einem <appSettings>Knoten enthalten.

Das <appSettings>Element erstellt eine Sammlung von Name-Wert-Paaren, auf die als zugegriffen werden kann System.Configuration.ConfigurationSettings.AppSettings. Es gibt jedoch keine Möglichkeit, Änderungen in der Konfigurationsdatei zu speichern.

Sie können einer Konfigurationsdatei auch eigene benutzerdefinierte Elemente hinzufügen, um beispielsweise eine strukturierte Einstellung zu definieren, IConfigurationSectionHandlerindem Sie eine Klasse erstellen, die diese implementiert, und sie dem <configSections>Element der Konfigurationsdatei hinzufügen . Sie können dann telefonisch darauf zugreifen ConfigurationSettings.GetConfig.

.NET 2.0 fügt eine neue Klasse hinzu System.Configuration.ConfigurationManager, die mehrere Dateien unterstützt, wobei die Daten pro System vom Benutzer überschrieben werden. Es unterstützt auch das Speichern geänderter Konfigurationen in Einstellungsdateien.

Visual Studio erstellt eine Datei App.configmit dem Namen, die beim Erstellen des Projekts mit dem richtigen Namen in den EXE-Ordner kopiert wird.

Mike Dimmick
quelle
6

Der beste (IMHO) Artikel über die Konfiguration von .NET-Anwendungen ist CodeProject, das die Geheimnisse der .NET 2.0-Konfiguration aufdeckt . Und mein nächster Lieblingsartikel (kürzer) über Abschnitte in den .NET-Konfigurationsdateien ist Grundlegendes zu Abschnittshandlern - App.config-Datei .

TcKs
quelle
Es ist wirklich nicht der einfachste Weg, den der Benutzer verlangt, aber das Aufdecken der Geheimnisse von .NET 2.0-Konfigurationen ist wirklich eine großartige Artikelserie.
Ricardo Amores
3

In Windows Forms haben Sie die app.configDatei, die der Datei sehr ähnlich ist web.config. Da ich jedoch sehe, dass Sie es für benutzerdefinierte Werte benötigen, empfehle ich die Verwendung von Einstellungen .

Öffnen Sie dazu Ihre Projekteigenschaften und gehen Sie zu den Einstellungen. Wenn keine Einstellungsdatei vorhanden ist, haben Sie einen Link zum Erstellen einer. Anschließend können Sie die Einstellungen zu der dort angezeigten Tabelle hinzufügen, wodurch sowohl das entsprechende XML als auch eine Einstellungsklasse generiert werden, mit der die Einstellungen geladen und gespeichert werden können.

Die Einstellungsklasse wird so etwas wie benannt DefaultNamespace.Properties.Settings. Dann können Sie Code ähnlich dem folgenden verwenden:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}
Konfigurator
quelle
2

Ich stimme den anderen Antworten zu, die Sie auf app.config verweisen. Anstatt Werte direkt aus app.config zu lesen, sollten Sie eine Dienstprogrammklasse erstellen (AppSettings ist der Name, den ich verwende), um sie zu lesen und als Eigenschaften verfügbar zu machen. Die AppSettings-Klasse kann verwendet werden, um Einstellungen aus mehreren Speichern zusammenzufassen, z. B. Werte aus app.config und Informationen zur Anwendungsversion aus der Assembly (AssemblyVersion und AssemblyFileVersion).

Jamie Ide
quelle
1

Verwenden:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings ist veraltet und gilt nun als veraltet ( Link ).

Außerdem wurde der Abschnitt appSettings der Datei app.config durch den Abschnitt applicationSettings ersetzt .

Wie bereits erwähnt, sollten Sie den für .NET 2.0 neuen System.Configuration.ConfigurationManager ( Link ) verwenden.

Edward Manning
quelle
ConfigurationSettings ist veraltet, nicht AppSettings.
Toby
0

Welche Version von .NET und Visual Studio verwenden Sie?

Wenn Sie das neue Projekt erstellt haben, sollte Ihre Lösung eine Datei mit dem Namen app.config enthalten . Dies ist die Standardkonfigurationsdatei.

Geoff
quelle