Slovenská verzeSlovensky

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í).

Miroslav Holec

Miroslav Holec

16. června. 2015
upraven 29. března. 2016

Tento článek je již velmi zastaralý. Zastaralé články nemusí popisovat aktuální stav technologií, nejideálnější řešení a můj aktuální pohled na danou technologii.

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

👨‍🎓 Webináře pro vývojáře

Vzdělávat se můžete i z pohodlí domova. Klasická školení jsem doplnil o související témata, která si můžete poslechnout v podobě živých webinářů. Přidejte se téměř 200 vývojářům, kteří se již připojili k mým webinářům!

Termín Místo
🍀 Konzumace REST API v .NET Core červen 2020 on-line více
🍀 Nástroje a šablony projektů v .NET Core červen 2020 on-line více
🍀 Entity Framework Core červen 2020 on-line více
Loading
Otevřít chat