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:
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.