Announcement

Collapse
No announcement yet.

App.Config dynamisch ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • App.Config dynamisch ändern

    Hallo,

    ich habe über meine App.config einen Trace-Switch konfiguriert. Dieser ruft ein Object der Klasse TraceListener auf, um ein Log-File zu schreiben.

    <PRE>
    &lt;system.diagnostics&gt;
    &lt;switches&gt;
    &lt;add name="myTraceSwitch" value="3" &gt;
    &lt;/switches&gt;
    &lt;trace autoflush="true" indentsize="3"&gt;
    &lt;listeners&gt;
    &lt;add name="MyListener" type="LGT.TraceListenerExt.FileTraceListener,Trace ListenerExt"
    initializeData="ARI_LOG" /&lt;
    &lt;/listeners&gt;
    &lt;/trace&gt;
    &lt;/system.diagnostics&gt;
    </PRE>

    Mein Problem ist nun folgendes:
    Das Ort wo das LOG-File abgelegt werden soll, soll innerhalb des Programmes dynamisch konfigurierbar sein!
    Wie kann ich auf meine App.Config zugreifen und ändern?

    Danke!

    Gruß Spuuky

  • #2
    Hallo,

    das könnte in etwa so aussehen - ich bin mir sicher, dass es eine elegantere Lösung geben wird ;-)
    <pre>
    &lt;appSettings&gt;
    &lt;add key=<font color="#9933CC">&quot;ConfigValue1&quot;</font> value=<font color="#9933CC">&quot;NeuerWert&quot;</font> /&gt;
    &lt;/appSettings&gt;
    </pre>
    Value-Eintrag zur Laufzeit austauschen:
    <pre>
    <b>using</b> System.Configuration;
    <b>using</b> System.Xml;
    <br>
    <b>private</b> <b>void</b> CheckNode(XmlNode aNode)
    {
    <b>if</b> (aNode.HasChildNodes)
    {
    <b>foreach</b> (XmlNode aChildNode <b>in</b> aNode.ChildNodes)
    {
    <b>if</b> (aChildNode.Name == <font color="#9933CC">&quot;add&quot;</font>)
    {
    <b>foreach</b> (XmlAttribute aXA <b>in</b> aChildNode.Attributes)
    {
    <b>if</b> (aXA.Name == <font color="#9933CC">&quot;value&quot;</font>)
    {
    aXA.Value = textBox1.Text;
    }
    }
    }
    CheckNode(aChildNode);
    }
    }
    }
    <br>
    <b>private</b> <b>void</b> button4_Click(<b>object</b> sender, System.EventArgs e)
    {
    XmlDocument aXD = <b>new</b> XmlDocument();
    aXD.Load(<font color="#9933CC">&quot;CSharpAppSettings.exe.config &quot;</font>);
    CheckNode(aXD.DocumentElement);
    aXD.Save(<font color="#9933CC">&quot;CSharpAppSettings.exe.config &quot;</font>);
    }
    </pre&gt

    Comment


    • #3
      Ok,

      also der Ansatz dazu ist ja so weit ok! Jetzt stehe ich aber vor dem Problem, dass ich auf die "CSharpAppSettings.exe.config" (für das Beispiel oben), keinen Zugriff erhalte.

      Ich kann anscheind im Laufenden Betrieb nicht auf die zum Programm zugehörige App.Confi zugreifen. Auf eine Kopie (z.B. "Kopie_CSharpAppSettings.exe.config") lässt sich aber ohne weiteres zugreifen.

      Stattdessen wird ein System.XmlXmlException ausgelöst!

      Nun ist guter Rat teuer!
      Hat irgend jemand eine Idee?

      Gruß Spuuk

      Comment

      Working...
      X