Vývojářský blog Tomáše Jechy

Tisk článku Tisk článku

.NET Tip #26: Čtení z App.config

[Zpět na blog]

Datum: 11. 4. 2009 16:33       Autor: Tomáš Jecha       Zobrazeno: 3596x

Kategorie: ASP.NET, VB.NET, C#, Aplikace, .NET Tips


Aplikace v .NET frameworku mají jednu zásadní vlastnost – konfigurační soubory s příponou config. Pro web to je klasicky Web.config a běžné assembly (aplikace, služby) skladují konfiguraci v souborech JménoSpustitelnéhoSouboru.exe.config. Informace jsou ukládány v čitelném XML a nabízejí snadný způsob jak modifikovat nastavení aplikace bez nutnosti psát zbytečně kód na čtení nastavení z alternativního umístění. Ve zkratce se jedná o velmi komplexní náhradu za dříve používané INI soubory.

Tento .NET tip představí způsob, jak takové konfigurační XML načítat a používat.

Pro čtení konfiguračních souborů se využívá tříd z assembly System.Configuration, proto si jej přidejte do referencí!

Pro demonstraci si založíme konzolovou aplikaci ConsoleApplication1. Té přidáme nový soubor konfigurace:

Add Config File

Implicitně se jmenuje App.config. Po kompilaci se do výstupního adresáře však automaticky umístí pod cílovým jménem - tedy v našem případě jako ConsoleApplication1.exe.config. Jako jeho obsah vložíme:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MojeDatabaze" connectionString="Server=server;Database=databaze;uid=jmeno;pwd=heslo;" />
  </connectionStrings>
  <appSettings>
    <add key="MojeNastaveni" value="Ahoj!" />
  </appSettings>
</configuration>

Ve zkratce si popíšeme 2 oddíly:

  • AppSettings – slouží k jednoduchému nastavování formou klíč / hodnota (v uvedeném konfiguračním souboru je to nastavení s klíčem MojeNastaveni a hodnotou Ahoj!)
  • ConnectionStrings - .NET framework je vybaven velmi silnou podporou databází a proto nikoho asi nepřekvapí, že lze do konfiguračního souboru ukládat přípojovací řetězce, které slouží jako popis připojení k databázi (více info o připojovacích řetězcích například na http://www.connectionstrings.com/)

Nyní si popíšeme 2 stavy – buď chceme přečíst konfiguraci pro aktuálně spuštěnou aplikaci (pro ConsoleApplication1.exe je to tedy konfigurace v souboru ConsoleApplication1.exe.config), a nebo máme zájem na nastavení jiné aplikace. Čtení té vlastní je o něco jednodušší – stačí použít statickou vlastnost třídy System.Configuration.ConfigurationManager:

' zjistit pripojovaci retezec z ConfigurationManageru
Dim connStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("MojeDatabaze").ConnectionString

' vypsat retezec
Console.WriteLine(connStr)

A pro čtení AppSettings pak:

' zjistit nastaveni pro klic "MojeNastaveni"
Dim mojeNastaveni As String = System.Configuration.ConfigurationManager.AppSettings("MojeNastaveni")

' vypsat hodnotu nastaveni
Console.WriteLine(mojeNastaveni)

Jak už jsem nastínil, někdy je potřeba otevřít konfiguraci jiné aplikace. To lze velmi snadno pomocí funkce ConfigurationManager.OpenExeConfiguration, které předáme jako parametr cestu k exe souboru:

' nadefinujeme cestu k exe souboru
Dim fileName As String = "C:\Develop\AqServer\Server.exe"

' konfigurace je reprezentovana tridou typu Configuration
Dim config As System.Configuration.Configuration

' přečíst konfigurace ze souboru pro dany exe soubor
config = System.Configuration.ConfigurationManager.OpenExeConfiguration(fileName)

V tomto případě získáme nastavení ze souboru C:\Develop\AqServer\Server.exe.config a proměnná config následně nabízí vlastnosti pro čtení konfiguračního XML, které lze používat velmi podobně:

' zjistit pripojovaci retezec z ConfigurationManageru
Dim connStr As String = config.ConnectionStrings.ConnectionStrings("MojeDatabaze").ConnectionString

' vypsat retezec
Console.WriteLine(connStr)

' zjistit nastaveni pro klic "MojeNastaveni"
Dim mojeNastaveni As String = config.AppSettings.Settings("MojeNastaveni").Value

' vypsat hodnotu nastaveni
Console.WriteLine(mojeNastaveni)

Možnosti konfiguračních config souborů jsou ale obrovské. Nastavení je možné dědit, či roztrhnout podle přihlášeného uživatele do několika souborů. Také lze například konfigurační sekce rozšiřovat o své vlastní komplexnější. To by však vystačilo na dlouhý článek. Pokud si chcete přečíst něco víc, doporučuji přejít na server CodeProject.com.


> Na začátek

 

Hodnocení:

Hlasů: 5
Zvolte své hodnocení

Tomáš Jecha

Tomáš Jecha již několikátým rokem získal ocenění Microsoft MVP. V současné době pracuje ve společnosti AVAST jako architekt a vývojář interních systémů. Působí také jako lektor a konzultant v počítačové škole Gopas. V současné době se zajímá především o SQL Server a technologie nad .NET Frameworkem 4. Společně s Tomášem Hercegem napsal tento web a stará se o jeho administraci.

Podpořte vznik dalších článků
RSS Feed RSS Feed

Diskuse

1 

strukturování appSettings

Datum: 17.2.2010 9:44
Autor: Jusepe
Hodnocení autora: 0
Příspěvků: 54
Je možné dále strukturovat? Např.
<appSettings>
<AS>
<add key="MojeNastaveni" value="Ahoj!" />
</AS>

<AL>
<add key="neco1" value="aa" />
<add key="neco2" value="bb" />
<add key="neco3" value="cc" />
</AL>

</appSettings>

Jak je potom možné vytahnout value v kodu smyčkou For each z každé podskupiny AS nebo AL?
Dik.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: strukturování appSettings

Datum: 17.2.2010 16:02
Autor: Tomáš Jecha
Hodnocení autora: 697
Příspěvků: 1285
AppSettings jsou jednoúrovňové. Struktura lze zapsat pouze vložením hodnot do atributu value.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: strukturování appSettings

Datum: 17.2.2010 18:16
Autor: Jusepe
Hodnocení autora: 0
Příspěvků: 54
Ani se s tim nechci chlubit, sice funguje, ale i z meho pohledu je to peknej bastl.
za appSettings jsem pridal:
<connectionStrings>
<add name="neco1" connectionString="V5_NETLINE" />
<add name="neco2" connectionString="V5_NTOOL" />
<add name="neco3" connectionString="V5_OUTGEN" />
<add name="neco4" connectionString="V5_VALIDAT_PROF" />
</connectionStrings>

Kolekci connectionStrings pak jedu smyčkou a taham connectionString. Jak by to bylo v XML elegantnější? Ini by bylo asi vhodnější, ale beru ho za překonané.
Rád bych měl vše v jednom konfiguračním souboru.

Diky za reakci.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
1 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.