Pokud se zabýváte vývojem aplikací v ASP.NET a máte již pár web napsaných a nasazených na serveru, určitě znáte ten problém, že na serveru a na lokálním testovacím stroji nejsou soubory web.config s konfigurací aplikace úplně stejné. Liší se v nich nejčastěji connectionStringy, ale většinou i další věci, jako třeba element compilation či customErrors. Pokud do konfigurace něco přidáváme, musíme to tedy přidávat na dvě místa - jednak do svého lokálního web.configu a jednak do web.configu na serveru. Velmi často se ale stane, že to někam přidat zapomenete, a problém je na světě. Jak z toho ven?
Existuje více různých řešení, já odobně používám pomocí atributu configSource. Ten můžete přidat libovolné sekci konfigurace a říct, že tato sekce se konfiguruje v jiném souboru. Protože na serveru a localhostu mám jiné connectionStringy, udělal jsem si soubor web2.config, do kterého jsem uložil jen sekci connectionStrings:
Soubor web2.config
<?xml version="1.0"?>
<connectionStrings>
<add name="webtridyConnectionString" connectionString="Data Source=.\sqlexpress;Initial Catalog=webtridy;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Tento soubor mám různý na serveru a na lokálním stroji, ale na něm se nic nemění. U sebe mám připojovací řetězec k testovací databázi, na serveru mám v tomto souboru připojovací řetězec k ostré.
Soubor web.config
Tady jsem místo uvedení connectionStringů natvrdo odkázal na soubor web2.config:
...
<appSettings />
<connectionStrings configSource="web2.config"/>
...
Podobně to je se sekcemi compilation (u sebe mám debug nastaven na true, na serveru na false) a customErrors (na serveru se při chybě zobrazí generická stránka s chybovým hlášením, na lokále si samozřejmě nechám přesnou chybu vypsat). Jen je nutno podotknout, že každá takto externě nadefinovaná sekce musí být v jiném souboru, mám tedy ještě soubory web3.config a web4.config, všechny jsem je dal do složky _Configuration, aby mi nepřekážely v kořenovém adresáři aplikace a abych si je náhodou nepřepsal při uploadu na FTP.
Výhodou je, že když potřebuji udělat změnu v konfiguraci, v drtivé většině se týká souboru web.config (connectionStringy a adresy chybových hlášek během vývoje neměním). Tento soubor je ale stejný na webu i na lokálním testovacím nasazení, takže změnu provádím na jednom místě.
Není to nic světoborného, předpokládám, že jste o tomto nebo jiném způsobu věděli, ale třeba se najde někdo, komu se tento článek hodit bude.