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

Tomáš Jecha, MVP, MCSD       11.04.2009       C#, VB.NET, ASP.NET/IIS, .NET Tips       14498 zobrazení

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.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

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

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

AppSettings jsou jednoúrovňové. Struktura lze zapsat pouze vložením hodnot do atributu value.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback