Soukromé lokální konfigurace web.config
Pokud pracuje na vývoji projektu větší množství vývojářů, dříve nebo později dojde k situaci, kdy každý provádí změny v konfiguračních souborech (web.config, app.config). Konfigurace se obvykle automaticky merguje ale nezřídka se stává, že si vývojáři vzájemně commitují například connection string (což je nežádoucí).
Lokální connection strings
Nejtypičtější je konfigurace connection stringů. V konfigurační sekci souboru Web.config
se odkážu na externí soubor pomocí atributu configSource
.
Web.Config
<configuration> <connectionStrings configSource="ConnectionStrings.config"/> </configuration>
Tento XML soubor si v projektu vytvořím a nastavím jeho vlastnosti:
Build Action: Content
Copy To Output Directory: Copy Always
Samotný soubor bude obsahovat jen konfigurační sekci connectionStrings
.
ConnectionStrings.config
<connectionStrings> <add name="ConnectionString1" connectionString="xxx" providerName="System.Data.SqlClient" /> <add name="ConnectionString2" connectionString="xxx" providerName="System.Data.SqlClient" /> </connectionStrings>
Transformace pro produkci
Transformaci connection stringů řeším úplným replacem celé sekce. Příkladem může být soubor Web.Production.config
:
Web.Production.config
<connectionStrings xdt:Transform="Replace"> <add name="ConnectionString1" connectionString="yyy" providerName="System.Data.SqlClient" /> <add name="ConnectionString2" connectionString="yyy" providerName="System.Data.SqlClient" /> </connectionStrings>
Výhoda takového řešení je patrná. Jako vývojář mohu dle libosti commitovat do verzovacího systému soubor Web.config
a Web.Production.config
, aniž by záleželo na mé konfiguraci, kterou mám v souboru ConnectionStrings.config
. Tento soubor mám jen lokálně a necommituji ho.
Toto nastavení se dá použít jak pro Web.config
tak pro App.Config
.
Náhled transformace ve VS
Pro náhled transformace lze ve Visual Studio (verze >= 2012) kliknout pravým myšítkem na specifický soubor a vybrat možnost Preview Transform.
Práce v týmu
Při týmovém vývoji a práci se source controllem postupuji tak, že provedu první commit všech ConnectionStrings.config souborů, aby měl každý vývojář při checkoutu repozitáře kompletní projekt. Vývojář si následně jen nastaví exclude na ConnectionStrings.config souborech a může si s nimi dělat co chce.
AppSettings
Velmi podobným způsobem mohu nastavit i proměnné v sekci appSettings
. Rozdíl je jen v tom, že místo atributu configSource
se použije atribut file
.
<configuration> <appSettings file="AppSettings.config" /> </configuration>
Podle toho můžu následně upravit i můj soukromý konfigurační soubor
AppSettings.config
<appSettings> <add key="someKey" value="personalValue" /> <appSettings>
Transformaci produkčního souboru řeším opět pomocí replace:
Web.Production.config
<appSettings xdt:Transform="Replace"> <add key="someKey" value="productionValue" /> </connectionStrings>
Poznámky k řešení
Konfigurací existuje celá řada. Místo xdt:Transform="Replace"
bych mohl pouze doplnit další konfigurační vlastnosti. K možnosti připojovat externí soubory bych mohl také přistoupit pouze jako k možnosti, jak zpřehlednit soubor Web.config a vyextrahovat z něj často měněné údaje. V takovém případě bych mohl nakonec transformace aplikovat i na samotném souboru ConnectionStrings.config
nebo AppSettings.config
.
Revize článku
- 28 červenec 2015 - na základě komentáře přidána část Práce v týmu