Miroslav Holec

Software & Cloud Architect

miroslavholec.cz / blog / soukrome-lokalni-konfigurace-web-config

Soukromé lokální konfigurace web.config

Miroslav Holec

Publikován 16. června 2015 , aktualizace: 29. března 2016 |

Tento článek je starší 18 měsíců a je proto možné, že popisuje postupy nebo technologie, které v uplynulé době mohly doznat výraznějších změn. Názory a myšlenky v tomto článku již nemusí vyjadřovat současné stanovisko autora nebo autorů. Článek byl napsán 16. června 2015.

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

Nastavení vlastností XML souboru

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.

Visual Studio 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

Potřebujete pomoci?

Líbil se Vám článek? Máte dotaz nebo chcete v této oblasti s něčím pomoci? Neváhejte se na mě obrátit.

mirek@miroslavholec.cz

  • Řešení vývojářských problémů
  • Konzultace
  • Firemní školení a workshopy