{"id":55000023,"date":"2016-02-01T00:00:00","date_gmt":"2020-03-27T19:17:23","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=23"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Anwendungskonfigurationsdateien","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Anwendungskonfigurationsdateien\/","title":{"rendered":"Anwendungskonfigurationsdateien"},"content":{"rendered":"<p><b>W&auml;hrend Sie etwa in einer Access-Anwendung leicht die Konfigurationsdaten in einer eigens daf&uuml;r vorgesehenen Tabelle speichern k&ouml;nnen oder in einer benutzerdefinierten Text- oder XML-Datei, gibt es unter C# andere M&ouml;glichkeiten. Wie f&uuml;r alles finden Sie unter C# auch f&uuml;r das Verwalten von Konfigurationsdaten einen eigenen Namespace &#8211; in diesem Fall hei&szlig;t dieser ConfigurationManager. Dieser Artikel zeigt, wie Sie damit Daten f&uuml;r Desktop-Anwendungen speichern und wieder abrufen k&ouml;nnen.<\/b><\/p>\n<h2>Beispielanwendung<\/h2>\n<p>Als Beispielanwendung legen wir ein C#-Projekt des Typs Konsolenanwendung an und speichern es unter dem Namen <b>Konfigurationsdateien<\/b>.<\/p>\n<h2>Ausprobieren<\/h2>\n<p>Wenn Sie die Methoden dieses Artikels selbst in ein neues Projekt eingeben und ausprobieren m&ouml;chten, f&uuml;gen Sie diese zur Klasse <b>Program.cs <\/b>hinzu und tragen den Aufruf der Methoden in die Methode <b>static void Main <\/b>ein &#8211; etwa wie in folgendem Beispiel:<\/p>\n<pre>static void Main(string[] args) {\r\n     KonfigurationsdatenLesen\r\n}<\/pre>\n<p>Alternativ nutzen Sie die im Artikel <b>Methodenstarter als Vorlage <\/b>vorgestellte Variante zum Aufrufen von Beispielmethoden.<\/p>\n<h2>Wozu Konfigurationsdateien<\/h2>\n<p>Wozu nutzt man &uuml;berhaupt Konfigurationsdateien Darin speichert man Daten, die nicht unbedingt zu den Gesch&auml;ftsdaten der Anwendung geh&ouml;ren (die in Tabellen landen), sondern die Informationen zur Anwendung wie etwa die Verbindungszeichenfolge enthalten. Diese k&ouml;nnten wir zwar f&uuml;r Anwendungen, die nur auf dem eigenen Rechner laufen und jederzeit neu kompiliert werden k&ouml;nnen, auch etwa in einer Konstanten speichern. Sobald Sie eine Anwendung jedoch weitergeben m&ouml;chten, sollten Sie Mechanismen vorsehen, mit denen Konfigurationsdaten an Orten gespeichert werden, die auch der Benutzer zur Laufzeit &auml;ndern kann.<\/p>\n<p>Ein gutes Beispiel ist die Verbindungszeichenfolge einer Datenbankanwendung. Ob es sich dabei um eine Verbindung zu einem SQL Server handelt oder auch nur die Angabe des Speicherpfades einer als Backend verwendeten Access-Datenbank, spielt dabei keine Rolle. Tatsache ist, dass es w&auml;hrend der Laufzeit geschehen kann, dass der Benutzer diese Daten &auml;ndern k&ouml;nnen sollte, um beispielsweise den Servernamen einer SQL Server-Verbindung zu &auml;ndern oder auch einen neuen Speicherpfad einer Access-Datenbank einzugeben.<\/p>\n<p>Eine solche Konfigurationsdatei mit einer Verbindungszeichenfolge f&uuml;r eine Access-Datenbank sieht beispielsweise wie folgt aus:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"utf-8\"&gt;\r\n&lt;configuration&gt;\r\n   &lt;connectionStrings&gt;\r\n     &lt;add name=\"Accessdatenbank\" \r\n         connectionString=\"c:\\Suedsturm.mdb\" \/&gt;\r\n   &lt;\/connectionStrings&gt;\r\n&lt;\/configuration&gt;<\/pre>\n<h2>Speicherort der Konfigurationsdateien<\/h2>\n<p>F&uuml;r eine C#-Anwendung legt Visual Studio drei Konfigurationsdateien an, die Sie im Projektverzeichnis finden. Direkt im Hauptverzeichnis landet die Datei <b>App.config<\/b>. Im Verzeichnis <b>bin\\Debug <\/b>finden Sie beim Debuggen die beiden Dateien <b><Anwendungsname>.exe.config <\/b>und <b><Anwendungsname>.vshost.exe.config<\/b>. Sp&auml;ter, wenn Sie die Anwendung erstellen, ist zun&auml;chst keine <b>.config<\/b>-Datei vorhanden. Diese wird erstellt, sobald die Anwendung Konfigurationsinformationen speichert &#8211; und zwar ebenfalls unter dem Namen <b><Anwendungsname>.exe.config<\/b>.<\/p>\n<p>Wenn Sie eine Anwendungskonfigurationsdatei zu einem Projekt hinzuf&uuml;gen m&ouml;chten, das nach der Installation bereitsteht, legen Sie die gew&uuml;nschte Datei im XML-Format an und speichern diese im Anwendungsverzeichnis.<\/p>\n<h2>Konfigurationsdatei manuell hinzuf&uuml;gen<\/h2>\n<p>Wenn Sie eine Konfigurationsdatei hinzuf&uuml;gen m&ouml;chten, statt diese per Code zu erzeugen, erledigen Sie dies am einfachsten &uuml;ber den Men&uuml;eintrag <b>Projekt|Neues Element hinzuf&uuml;gen<\/b>. Dies &ouml;ffnet den Dialog <b>Neues Element hinzuf&uuml;gen<\/b>, wo Sie den Eintrag <b>Anwendungskonfigurationsdatei <\/b>ausw&auml;hlen (siehe Bild 1). Geben Sie den gew&uuml;nschten Namen f&uuml;r die Anwendungskonfigurationsdatei ein und klicken Sie auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_23_001.png\" alt=\"Anlegen einer Anwendungskonfigurationsdatei\" width=\"650\" height=\"377,3949\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anlegen einer Anwendungskonfigurationsdatei<\/span><\/b><\/p>\n<p>Die neue Anwendungskonfigurationsdatei sieht nun wie in Bild 2 aus und wird auch im Projektmappen-Explorer angezeigt. Prinzipiell ben&ouml;tigen Sie aber keine neue Konfigurationsdatei, denn das Projekt bringt mit <b>app.config <\/b>bereits eine solche mit. Sollten Sie diese Datei jedoch einmal versehentlich l&ouml;schen, k&ouml;nnen Sie diese mit der oben beschriebenen Vorgehensweise wieder herstellen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_23_002.png\" alt=\"Die neue Anwendungskonfigurationsdatei\" width=\"650\" height=\"229,3571\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Die neue Anwendungskonfigurationsdatei<\/span><\/b><\/p>\n<h2>Konfigurationsdaten anlegen<\/h2>\n<p>Um Konfigurationsdateien mit Eigenschaften auszustatten, verwenden Sie den Einstellungen-Editor von Visual Studio. Um diesen zu &ouml;ffnen, klicken Sie doppelt auf den Eintrag <b>Properties <\/b>im Projektmappen-Explorer. Wechseln Sie dann zum Bereich <b>Einstellungen <\/b>und f&uuml;gen Sie die ben&ouml;tigten Eigenschaften samt Datentyp, Bereich (<b>Benutzer <\/b>oder <b>Anwendung<\/b>) sowie den Standardwert fest (siehe Bild 3). Warum Standardwert Weil die Konfigurationsdatei erst beim Erstellen der Anwendung erzeugt und mit Werten gef&uuml;llt wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_23_003.png\" alt=\"Einstellungen zu einer Anwendung hinzuf&uuml;gen\" width=\"650\" height=\"411,7275\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Einstellungen zu einer Anwendung hinzuf&uuml;gen<\/span><\/b><\/p>\n<p>Um dies zu pr&uuml;fen, erstellen Sie die Anwendung zum Debuggen (<b>F5<\/b>) und schauen sich anschlie&szlig;end den Inhalt der Datei <b>app.config <\/b>im Hauptverzeichnis des Projekts an. Diese sieht nun in gek&uuml;rzter Form wie in Listing 1 aus. Im Bereich <b>userSettings <\/b>finden Sie die Eigenschaft mit der Bezeichnung <b>Eigenschaft1 <\/b>und dem Wert <b>Wert1<\/b>, unter <b>applicationSettings <\/b>die Eigenschaft namens <b>Eigenschaft2 <\/b>mit dem Wert <b>Wert2<\/b>.<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"utf-8\" &gt;\r\n&lt;configuration&gt;\r\n     &lt;configSections&gt;\r\n         &lt;sectionGroup name=\"userSettings\" ... &gt;\r\n             &lt;section name=\"Konfigurationsdateien.Properties.Settings\" ... \/&gt;\r\n         &lt;\/sectionGroup&gt;\r\n         &lt;sectionGroup name=\"applicationSettings\" ... &gt;\r\n             &lt;section name=\"Konfigurationsdateien.Properties.Settings\" ... \/&gt;\r\n         &lt;\/sectionGroup&gt;\r\n     &lt;\/configSections&gt;\r\n     &lt;startup&gt; \r\n         &lt;supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5.2\" \/&gt;\r\n     &lt;\/startup&gt;\r\n     &lt;userSettings&gt;\r\n         &lt;Konfigurationsdateien.Properties.Settings&gt;\r\n             &lt;setting name=\"Eigenschaft1\" serializeAs=\"String\"&gt;\r\n                 &lt;value&gt;Wert1&lt;\/value&gt;\r\n             &lt;\/setting&gt;\r\n         &lt;\/Konfigurationsdateien.Properties.Settings&gt;\r\n     &lt;\/userSettings&gt;\r\n     &lt;applicationSettings&gt;\r\n         &lt;Konfigurationsdateien.Properties.Settings&gt;\r\n             &lt;setting name=\"Eigenschaft2\" serializeAs=\"String\"&gt;\r\n                 &lt;value&gt;Wert2&lt;\/value&gt;\r\n             &lt;\/setting&gt;\r\n         &lt;\/Konfigurationsdateien.Properties.Settings&gt;\r\n     &lt;\/applicationSettings&gt;\r\n&lt;\/configuration&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Konfigurationsdatei app.config mit einer Benutzer- und einer Anwendungseinstellung<\/span><\/b><\/p>\n<h2>Einlesen der Konfigurationsdateien<\/h2>\n<p>Wenn Sie die so angelegten Einstellungen von einer C#-Anwendung aus einlesen m&ouml;chten, erledigen Sie das etwa mit einer Methode wie der folgenden:<\/p>\n<pre>public static void KonfigurationsdatenLesen() {\r\n     Settings settings = new Settings();\r\n     Console.WriteLine(\"Wert von Eigenschaft1: {0}\", \r\n         settings.Eigenschaft1);\r\n     Console.WriteLine(\"Wert von Eigenschaft2: {0}\", \r\n         settings.Eigenschaft2);\r\n     Console.ReadLine();\r\n}<\/pre>\n<p>Bei der Eingabe dieser Methode wird Visual Studio meckern, weil es das Objekt <b>Settings <\/b>nicht kennt. <b>Settings <\/b>ist eine Klasse, die automatisch angelegt wird, sobald Sie im Bereich <b>Properties <\/b>der Anwendungseinstellungen eine Eigenschaft angelegt haben. Diese Klasse sehen Sie auch im Projektmappen-Explorer (siehe Bild 4). Damit Sie im Code komfortabel auf die Elemente der <b>Settings<\/b>-Klasse zugreifen k&ouml;nnen, f&uuml;gen Sie dem Klassenmodul mit der <b>using<\/b>-Direktive einen Verweis auf das Element <b><Anwendungsname>.Properties <\/b>hinzu:<\/p>\n<p class=\"image\"><img loading=\"lazy\" decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_01\/pic_23_004.png\" alt=\"Die Klasse Settings stellt die benutzerdefinierten Einstellungen bereit.\" width=\"425\" height=\"493\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Klasse Settings stellt die benutzerdefinierten Einstellungen bereit.<\/span><\/b><\/p>\n<pre>using Konfigurationsdateien.Properties;<\/pre>\n<p>Danach ist der Zugriff auf die Klasse <b>Settings <\/b>per Code problemlos m&ouml;glich, und Sie k&ouml;nnen die Werte der per Benutzeroberfl&auml;che hinzugef&uuml;gten Einstellungen &uuml;ber <b>settings.Eigenschaft1 <\/b>und <b>settings.Eigenschaft2 <\/b>ausgeben. Die Klasse <b>Settings <\/b>wird automatisch bei &Auml;nderungen an den Eigenschaften neu erstellt und arbeitet wie eine benutzerdefinierte Klasse &#8211; sie stellt die Eigenschaften per <b>Set<\/b>&#8211; und <b>Get<\/b>-Methode zum Lesen und Schreiben zur Verf&uuml;gung. Ein Blick in den Code dieser Klasse zeigt jedoch direkt, dass die Einstellungen des Bereichs <b>Benutzer <\/b>gelesen und ge&auml;ndert, die Einstellungen des Bereichs <b>Anwendung <\/b>jedoch nur gelesen werden k&ouml;nnen.<\/p>\n<h2>Benutzereinstellungen &auml;ndern<\/h2>\n<p>Wenn Sie also per Code Einstellungen &auml;ndern m&ouml;chten, gelingt dies ohne Weiteres nur bei den Benutzereinstellungen &#8211; und zwar beispielsweise wie folgt:<\/p>\n<pre>public static void KonfigurationsdatenAendern() {\r\n     Settings settings = new Settings();\r\n     settings.Eigenschaft1 = \"Test1_Neu\";\r\n     settings.Save();\r\n     Console.ReadLine(); }<\/pre>\n<p>Dies &auml;ndert den Wert von <b>Eigenschaft1 <\/b>auf <b>Test1_Neu<\/b>. Wenn Sie diese Methode aufrufen und anschlie&szlig;end nochmals die Methode <b>KonfigurationsdatenLesen<\/b>, wird der neue Wert ausgegeben.<\/p>\n<h2>Speicherort nach der Weitergabe<\/h2>\n<p>Wo sich die Konfigurationsdatei beim Debuggen befindet, haben wir bereits weiter oben erl&auml;utert. Aber wo finden Sie die entsprechenden Dateien, wenn Sie die <b>.exe<\/b>-Datei weitergeben und auf einem anderen Rechner ausf&uuml;hren Genau genommen handelt es sich in diesem Fall um zwei Konfigurationsdateien. Die erste enth&auml;lt die Benutzereinstellungen, die zweite die Anwendungseinstellungen. Die Benutzereinstellungen finden Sie etwa unter Windows 7 in einem Verzeichnis, das sich wie folgt zusammensetzt:<\/p>\n<pre>C:\\Users\\&lt;Benutzername&gt;\\AppData\\Local\\&lt;Hersteller&gt;\\&lt;Anwendungsname&gt;.exe_&lt;Evidence Type&gt;_&lt;Evidence Hash&gt;\\&lt;Version&gt;\\user.config<\/pre>\n<p>Wenn Sie f&uuml;r <b><Hersteller> <\/b>keine Angabe in der Datei <b>AssemblyInfo.cs <\/b>gemacht haben, verwendet die Anwendung die Bezeichnung des Namespace (hier <b>nsKonfigurationsdateien<\/b>). <b><Evidence Type> <\/b>und <b><Evidence Hash> <\/b>werden vom System generiert. Diese Datei enth&auml;lt nur den Bereich <b>userSettings <\/b>der weiter oben vorgestellten Konfigurationsdatei:<\/p>\n<pre>&lt;configuration&gt;\r\n     &lt;userSettings&gt;\r\n         &lt;Konfigurationsdateien.Properties.Settings&gt;\r\n             &lt;setting name=\"Eigenschaft1\" serializeAs=\"String\"&gt;\r\n                 &lt;value&gt;Test1_Neu&lt;\/value&gt;\r\n             &lt;\/setting&gt;\r\n         &lt;\/Konfigurationsdateien.Properties.Settings&gt;\r\n     &lt;\/userSettings&gt;\r\n&lt;\/configuration&gt;<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000023\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000023?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000023\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8c6e41522b\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W&auml;hrend Sie etwa in einer Access-Anwendung leicht die Konfigurationsdaten in einer eigens daf&uuml;r vorgesehenen Tabelle speichern k&ouml;nnen oder in einer benutzerdefinierten Text- oder XML-Datei, gibt es unter C# andere M&ouml;glichkeiten. Wie f&uuml;r alles finden Sie unter C# auch f&uuml;r das Verwalten von Konfigurationsdaten einen eigenen Namespace &#8211; in diesem Fall hei&szlig;t dieser ConfigurationManager. Dieser Artikel zeigt, wie Sie damit Daten f&uuml;r Desktop-Anwendungen speichern und wieder abrufen k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012016,662016,44000010,44000035,44000021,44000025],"tags":[],"yst_prominent_words":[66062023,66062051,66062059,66062061],"class_list":["post-55000023","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-Anwendungsentwicklung","category-COMDLLs_programmieren","category-Entity_Framework","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000023","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000023"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000023\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000023"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}