2013-11-25 18 views
6

Ich brauche "http://example.com" aus der App.config-Datei.Wie verwendet man ConfigurationManager.AppSettings mit einem benutzerdefinierten Abschnitt?

Aber im Moment bin ich mit:

string peopleXMLPath = ConfigurationManager.AppSettings["server"]; 

Ich kann den Wert nicht bekommen.

Können Sie darauf hinweisen, was ich falsch mache?

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <configSections> 
    <section name="device" type="System.Configuration.SingleTagSectionHandler" /> 
    <section name="server" type="System.Configuration.SingleTagSectionHandler" /> 
    </configSections> 
    <device id="1" description="petras room" location="" mall="" /> 
    <server url="http://example.com" /> 
</configuration> 
+0

http://haacked.com/archive/2007/03/11/custom-configuration-sections -in-3-easy-steps.aspx – GibboK

+0

'ConfigurationManager.AppSettings [" MyAppSetting "]' gibt nur die Einstellung, die mit dem Namen "MyAppSetting" unter '' in Ihrer Konfigurationsdatei eingegeben wurde. –

+1

Überprüfen Sie diesen Link http://stackoverflow.com/questions/6329114/how-to-read-a-values-from-new-section-in-web-config –

Antwort

14

Ich glaube, Sie brauchen, um die config: Sie können Ihre Einstellung zu AppSettings einfach hinzufügen Abschnitt, und den Zugang, dass:

var section = ConfigurationManager.GetSection("server") as NameValueCollection; 
var value = section["url"]; 

und Sie müssen auch Ihre Config-Datei aktualisieren:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <configSections> 
    <section name="device" type="System.Configuration.NameValueSectionHandler" /> 
    <section name="server" type="System.Configuration.NameValueSectionHandler" /> 
    </configSections> 
    <device> 
    <add key="id" value="1" /> 
    <add key="description" value="petras room" /> 
    <add key="location" value="" /> 
    <add key="mall" value="" /> 
    </device> 
    <server> 
    <add key="url" value="http://example.com" /> 
    </server> 
</configuration> 

Edit: As CodeCaster mentioned in his answer, SingleTagSectionHandler ist nur für den internen Gebrauch. Ich denke, NameValueSectionHandler ist die bevorzugte Möglichkeit, um Konfigurationsabschnitte zu definieren.

+0

mit meinem xml funktioniert leider nicht, ... sollte ich ändere mein XML? – GibboK

+1

Ja. Du musst 'url =" http://example.com "' von einem Attribut auf 'server' zu einem 'add'-Tag für untergeordnete Elemente machen. –

+0

Vielen Dank für Ihre Bearbeitung – GibboK

0
string peopleXMLPath = ConfigurationManager.AppSettings["server"]; 

erhält den Wert aus dem appSettings Teil der app.config-Datei, aber Sie Ihren Wert in

<server url="http://example.com" /> 

entweder den Wert im appSettings Abschnitt setzen, wie unten oder Abrufen der Speicher Wert von seinem aktuellen Standort.

Sie müssen dem AppSettings-Abschnitt Ihrer Konfiguration ein Schlüsselwertpaar hinzufügen. Wie unten:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="server" value="http://example.com" /> 
    </appSettings> 
</configuration> 

Ihr Lesecode ist korrekt, aber Sie sollten wahrscheinlich auf Null überprüfen. Wenn der Code den Konfigurationswert nicht lesen kann, ist die string Variable null.

0

Sie definieren eine Konfiguration Abschnitt anstelle eines Wert in AppSettings.

<appSettings> 
     ... may be some settings here already 
     <add key="server" value="http://example.com" /> 
</appSettings> 

Custom config sections sind in der Regel für kompliziertere Konfigurationen (zB mehrere Werte pro Schlüssel, Nicht-String-Werte usw.

-1

Wenn Sie den Wert aus den App-Einstellungen erhalten möchten, muss Ihr Appsetting-Element in der Konfigurationsdatei einen Schlüssel haben.

definieren Sie Ihre Sever Wert, wie nachstehend unter Konfiguration Abschnitt erwähnt:

<configuration> 
    <appSettings> 
      <add key="server" value="http://example.com" /> 
    </appSettings> 
    ... 
    ... 
    ... 
</configuration> 

nun unter Codezeile führen Sie den Server-URL zu erhalten:

string peopleXMLPath = ConfigurationManager.AppSettings["server"].ToString(); 
3

Die SingleTagSectionHandler documentation says:

Diese API unterstützt das .NET Framewor k Infrastruktur und ist nicht dazu gedacht, direkt von Ihrem Code verwendet zu werden.

Wie here allerdings gezeigt, können Sie es als HashTable abrufen können und Zugriff auf seine Einträge:

Hashtable serverTag = (Hashtable)ConfigurationManager.GetSection("server"); 

string serverUrl = (string)serverTag["url"];