Was ist App.config in C # .NET? Wie benutzt man es?

178

Ich habe ein Projekt in C # .NET durchgeführt, bei dem meine Datenbankdatei eine Excel-Arbeitsmappe ist. Da der Speicherort der Verbindungszeichenfolge in meiner Codierung fest codiert ist, gibt es kein Problem für die Installation in meinem System, für andere Systeme jedoch.

Gibt es eine Möglichkeit, den Benutzer aufzufordern, nach Abschluss der Einrichtung der Anwendung einmal einen Pfad festzulegen?

Die Antworten, die ich erhielt, waren "App.Config verwenden" ... kann jemand sagen, was diese App.config ist und wie ich sie in meinem Kontext hier verwenden kann?

Shyam
quelle
4
mögliches Duplikat von Wofür ist app.config?
Benutzer

Antworten:

190

Im einfachsten Fall ist die app.config eine XML-Datei mit vielen vordefinierten Konfigurationsabschnitten und Unterstützung für benutzerdefinierte Konfigurationsabschnitte. Ein "Konfigurationsabschnitt" ist ein XML-Ausschnitt mit einem Schema, in dem Informationen gespeichert werden sollen.

Einstellungen können mithilfe integrierter Konfigurationsabschnitte wie connectionStringsoder konfiguriert werden appSettings. Sie können Ihre eigenen benutzerdefinierten Konfigurationsabschnitte hinzufügen. Dies ist ein fortgeschrittenes Thema, aber sehr leistungsfähig zum Erstellen stark typisierter Konfigurationsdateien.

Webanwendungen haben normalerweise eine web.config, während Windows-GUI- / Dienstanwendungen eine app.config-Datei haben.

Konfigurationsdateien auf Anwendungsebene erben Einstellungen von globalen Konfigurationsdateien, z. B. der Datei machine.config.

Lesen aus der App.Config

Verbindungszeichenfolgen haben ein vordefiniertes Schema, das Sie verwenden können. Beachten Sie, dass dieses kleine Snippet tatsächlich eine gültige app.config- (oder web.config-) Datei ist:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

Nachdem Sie Ihre app.config definiert haben, können Sie sie mit dem ConfigurationManager im Code lesen Klasse . Lassen Sie sich von den ausführlichen MSDN-Beispielen nicht einschüchtern. es ist eigentlich ganz einfach.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

Schreiben in die App.Config

Das häufige Ändern der * .config-Dateien ist normalerweise keine gute Idee, aber es scheint, als ob Sie nur eine einmalige Einrichtung durchführen möchten.

Siehe: Verbindungszeichenfolge ändern und app.config zur Laufzeit neu laden, in der beschrieben wird, wie die aktualisiert wirdconnectionStrings Abschnitt der Datei * .config zur Laufzeit .

Beachten Sie, dass Sie solche Konfigurationsänderungen idealerweise mit einem einfachen Installationsprogramm durchführen würden.

Speicherort der App.Config zur Laufzeit

F : Angenommen, ich ändere einige manuell <value>in app.config, speichere sie und schließe sie dann. Wenn ich jetzt zu meinem bin-Ordner gehe und die EXE-Datei von hier aus starte, warum spiegelt sie nicht die angewendeten Änderungen wider?

A : Wenn Sie eine Anwendung kompilieren, wird ihre app.config mit einem Namen, der Ihrer exe entspricht, in das bin-Verzeichnis 1 kopiert . Wenn Ihre Exe beispielsweise "test.exe" heißt, sollte sich in Ihrem bin-Verzeichnis eine "text.exe.config" befinden. Sie können die Konfiguration ohne Neukompilierung ändern, müssen jedoch die Konfigurationsdatei bearbeiten, die zur Kompilierungszeit erstellt wurde, nicht die ursprüngliche app.config.

1: Beachten Sie, dass web.config-Dateien nicht verschoben werden, sondern sich zum Zeitpunkt der Kompilierung und Bereitstellung am selben Speicherort befinden. Eine Ausnahme bildet die Transformation einer web.config .

.NET Core

Mit .NET Core wurden neue Konfigurationsoptionen eingeführt. Die Funktionsweise von * .config-Dateien scheint sich nicht geändert zu haben, aber Entwickler können neue, flexiblere Konfigurationsparadigmen auswählen.

Tim Medora
quelle
Siehe auch: codeproject.com/Articles/16466/… für einen guten Überblick über die Funktionsweise von Konfigurationsdateien
BKSpurgeon
56

App.config ist einfach ein XMLbasiertes Dateiformat, das die Konfigurationen auf Anwendungsebene enthält .

Beispiel:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

Sie können auf die Konfigurationen zugreifen, indem Sie ConfigurationManagerwie im folgenden Codeausschnitt gezeigt Folgendes verwenden:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

Hinweis: ConfigurationSettings Dies ist eine veraltete Methode zum Abrufen von Konfigurationsinformationen.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Furqan Safdar
quelle
21
Sie müssen referenzieren System.Configuration.dll, um die oben genannten APIs verwenden zu können.
KFL
2
Zum einen sollten Sie keine Verbindungszeichenfolgen im Abschnitt AppSettings speichern, sondern im Abschnitt ConnectionStrings. Für zwei generiert Visual Studio stark typisierte Eigenschaften für Ihre Einstellungen, wenn Sie sie ordnungsgemäß über den Designer erstellen. Sie sollten niemals einen Schlüsselnamen manuell eingeben müssen (wie im obigen Code).
BrainSlugs83
1
Wir sprechen hier nicht über die Best Practices, sondern über die Lösung des OP-Problems.
Furqan Safdar
2
System.Configuration.ConfigurationManager.AppSettings["Key"]ist bereits eine Zeichenfolge, deren Aufruf ToString()redundant ist.
Bogdan Stăncescu
4

Nur um etwas hinzuzufügen, das mir in allen Antworten gefehlt hat - auch wenn es albern und offensichtlich erscheint, sobald Sie wissen:

Die Datei muss "App.config" oder "app.config" heißen und kann sich in Ihrem Projekt auf derselben Ebene befinden wie z. B. Program.cs.

Ich weiß nicht, ob andere Speicherorte möglich sind. Andere Namen (wie application.conf, wie in der ODP.net-Dokumentation vorgeschlagen) haben bei mir nicht funktioniert.

PS. Ich habe mit Visual Studio Code begonnen und ein neues Projekt mit "dotnet new" erstellt. In diesem Fall wird keine Konfigurationsdatei erstellt. Ich bin sicher, dass es andere Fälle gibt. PPS. Möglicherweise müssen Sie ein Nuget-Paket hinzufügen, um die Konfigurationsdatei lesen zu können. Im Fall von .NET CORE lautet dies "dotnet add package System.Configuration.ConfigurationManager --version 4.5.0".

Dantel35
quelle
das habe ich gesucht. Musste wissen, auf welcher Ebene es aufgenommen werden soll. Einige Programme / Frameworks sehen in Ordnern wie/resources
Alex
3

App.Config ist eine XML-Datei, die als Konfigurationsdatei für Ihre Anwendung verwendet wird. Mit anderen Worten, Sie speichern darin alle Einstellungen, die Sie möglicherweise ändern möchten, ohne den Code ändern (und neu kompilieren) zu müssen. Es wird häufig zum Speichern von Verbindungszeichenfolgen verwendet.

Lesen Sie dazu diesen MSDN-Artikel .

System ausgefallen
quelle
1

Sie können auf Schlüssel in der App.Config zugreifen, indem Sie:

ConfigurationSettings.AppSettings["KeyName"]

Schauen Sie sich diesen Thread an

CloudyMarble
quelle
16
es gilt jetzt als veraltet
mikus