99 Stimmen

Variablen in app.config/web.config

Ist es möglich, etwas wie das Folgende in der app.config o web.config Dateien?

<appSettings>
 <add key="MyBaseDir" value="C:\MyBase" />
 <add key="Dir1" value="[MyBaseDir]\Dir1"/>
 <add key="Dir2" value="[MyBaseDir]\Dir2"/>
</appSettings>

Ich möchte dann in meinem Code auf Dir2 zugreifen, indem ich einfach sage:

 ConfigurationManager.AppSettings["Dir2"]

Dies wird mir helfen, wenn ich meine Anwendung auf verschiedenen Servern und an verschiedenen Standorten installiere, da ich nur EINEN Eintrag in meiner gesamten Anwendung ändern muss. app.config . (Ich weiß, dass ich die gesamte Verkettung im Code verwalten kann, aber ich bevorzuge diesen Weg).

1 Stimmen

Ich glaube, er meint damit die Definition von Variablen, die in appSettings-Schlüsseln direkt in den Konfigurationsdateien verwendet werden sollen.

1 Stimmen

Ich habe auch die Verwendung der XML <!ENTITY>-Deklaration ausprobiert, aber sie wird aufgrund der Art und Weise, wie MS web.config-Dateien behandelt, nicht unterstützt.

0 Stimmen

Vielen Dank für Ihre Bemühungen. Ich ziehe es vor, keinen Code zu ändern. Der Code enthält bereits eine Anweisung, die lautet: string dir2=ConfigurationManager.AppSettings["Dir2"]. Ich möchte nur die app.config bereinigen, in der jetzt value=" steht. D:\blahdir\Dir2 " anstelle von value="[MyBaseDir] \Dir2 "

3voto

JoshBerke Punkte 64214

Sie haben mehrere Möglichkeiten. Sie könnten dies mit einem Build-/Deploy-Schritt tun, der Ihre Konfigurationsdatei verarbeitet und Ihre Variablen durch den richtigen Wert ersetzt.

Eine andere Möglichkeit wäre, einen eigenen Konfigurationsabschnitt zu definieren, der dies unterstützt. Stellen Sie sich zum Beispiel diese xml vor:

<variableAppSettings>
 <variables>
    <add key="@BaseDir" value="c:\Programs\Widget"/>
 </variables>
 <appSettings>
    <add key="PathToDir" value="@BaseDir\Dir1"/>
 </appSettings>
</variableAppSettings>

Nun würden Sie dies mit Hilfe von benutzerdefinierten Konfigurationsobjekten implementieren, die das Ersetzen der Variablen zur Laufzeit für Sie übernehmen würden.

0 Stimmen

Ich sehe Ihr Xml nicht im Beitrag (rücken Sie Ihre Zeile um 5 Zeichen ein, um Xml-Tags posten zu können - ich hatte das gleiche Problem beim letzten Mal). Außerdem, was sind "benutzerdefinierte Konfigurationsobjekte"? Ich ziehe es vor, dies ohne Kodierung zu erreichen, da Kodierungsänderungen in diesem Stadium uns viel zurückwerfen würden.

0 Stimmen

Die benutzerdefinierte Konfiguration beinhaltet definitiv [einfache] Kodierung. Aber IMHO ist es immer Ihre beste Option. Ich verwende appSettings fast nie und ziehe es stattdessen vor, für jedes Projekt eine eigene Konfiguration zu erstellen.

3voto

autocro Punkte 31

Sie können Umgebungsvariablen in Ihrem app.config für das von Ihnen beschriebene Szenario

<configuration>
  <appSettings>
    <add key="Dir1" value="%MyBaseDir%\Dir1"/>
  </appSettings>
</configuration>

Dann können Sie leicht den Weg mit bekommen:

var pathFromConfig = ConfigurationManager.AppSettings["Dir1"];
var expandedPath = Environment.ExpandEnvironmentVariables(pathFromConfig);

2voto

Sergio Punkte 7951

Innerhalb <appSettings> können Sie Anwendungsschlüssel erstellen,

<add key="KeyName" value="Keyvalue"/>

Später können Sie auf diese Werte mit zugreifen:

ConfigurationManager.AppSettings["Keyname"]

0 Stimmen

Um die Klasse ConfigurationManager zu verwenden, müssen Sie einen Verweis auf System.Configuration hinzufügen und eine using-Anweisung für System.Configuration einfügen (Importe in VB)

2 Stimmen

Der Hinweis ist richtig, aber keine Antwort auf die gestellte Frage.

1voto

Johannes Punkte 77

Ich würde vorschlagen, dass Sie DslConfig . Mit DslConfig können Sie hierarchische Konfigurationsdateien von Global Config über Config pro Server-Host bis zu Config pro Anwendung auf jedem Server-Host verwenden (siehe AppSpike).
Wenn Ihnen das zu kompliziert ist, können Sie einfach die globalen Konfigurationsvariablen verwenden.var
Einfach in Varibales.var konfigurieren

baseDir = "C:\MyBase"
Var["MyBaseDir"] = baseDir
Var["Dir1"] = baseDir + "\Dir1"
Var["Dir2"] = baseDir + "\Dir2"

Und erhalten Sie die Konfigurationswerte mit

Configuration config = new DslConfig.BooDslConfiguration()
config.GetVariable<string>("MyBaseDir")
config.GetVariable<string>("Dir1")
config.GetVariable<string>("Dir2")

0voto

Ich glaube nicht, dass Sie Variablen deklarieren und verwenden können, um appSettings-Schlüssel innerhalb einer Konfigurationsdatei zu definieren. Ich habe Verkettungen im Code immer so gehandhabt wie Sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X