Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

.NET’te Config Dosyasını Harici Kaynakla Beslemek

Merhaba,

Biz .NET geliştiricileri masaüstü yahut web dalında projeler geliştirirken belli başlı bilgileri configürasyon dosyalarında tutmaktayız. Bu dosyalarımız genellikle web projelerinde Web.config dosyası iken masaüstü projelerinde ise App.config dosyalarıdır. Ama biliyoruz ki bu dosyaların ne isimleri değiştirilebilmekte ne de dosya dizinleri. Eee haliyle bu şekilde tek bir dosya ile çalışmak mecburiyetinde kalıyor ve tutulan tüm bilgiler bir curcuna misali ilgili dosyada saklanıyor.

İşte bu mecburiyete bir alternatif olarak ilgili “Web.config” ya da “App.config” dosyasına bir harici kaynak oluşturabiliyor ve ilgili segmenti, oluşturulan bu harici kaynak ile besleyebiliyoruz. Şimdi gelin bu işlemi hangi şartlarda nasıl yapıyoruz inceleyelim.

Makalemizde bir Console Application üzerinden anlatım sergileyeceğimden dolayı App.config dosyası üzerinde bir örneklendirme yapacağız.(App.config’te gösterilenlerin Web.config’te aynen uygulanabileceğini söylememe gerek yok sanırım)

Örneğin projelerimizde mail bilgilerini configürasyon dosyasında tutacağımızı varsayalım.

Öncelikle harici configürasyon dosyasını oluşturalım. (MailBilgileri.config)

--- MailBilgileri.config ---
<appSettings>
  <add key="Ad" value="Gençay" />
  <add key="Soyad" value="Yıldız" />
  <add key="EPosta" value="gyildizmail@gmail.com" />
</appSettings>

Ardından esas configürasyon dosyamızın içeriğini oluşturalım. (App.config)

--- App.config ---
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings configSource="MailBilgileri.config">

  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>

Şimdi, App.config dosyamızın içeriğini incelerseniz eğer appSettings sekmesine bir configSource niteliği eklenmiştir ve ilgili harici kaynağın adresi belirtilmiştir.

Bu işlem neticesinde esas confügürasyon dosyamız harici kaynaktaki içerikten beslenecektir.
Tabi bu kullanım sürecinde dikkat etmemiz gereken bir kaç husus vardır.
Buyrun, bu hususları inceleyelim…

  • Harici Kaynak Sadece Belirtileceği Segmenti Barındırmalıdır
    Dikkat ederseniz eğer harici kaynağımız içerisinde appSettings segmenti mevcuttur. Haliyle bu kaynak sadece appSettings segmentine configSource niteliği ile source olarak gösterilebilir.
  • Harici Kaynağın Yolu Tam Belirtilmelidir
    Yukarıdaki örnekte harici kaynağımız, App.config dosyasıyla aynı dizinde olduğu için direkt olarak belirtilmiştir. Yok eğer farklı bir dizinde olsaydı aşağıdaki örnekte olduğu gibi belirtilmesi gerekecekti.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings configSource="Configs\\MailBilgileri.config">
    
      </appSettings>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      </startup>
    </configuration>
    
  • Harici Kaynağın “Copy to Output Directory” Özelliği “Copy İf Newer” Yahut “Copy Always” Olmalıdır
    .NET'te Config Dosyasını Harici Kaynakla Beslemek
    Ekran görüntüsünde de olduğu gibi ilgili harici dosyanın özelliklerinde bulunan “Copy to Output Directory” özelliği ya “Copy if newer” yahut da “Copy always” olmalıdır. 
     
     

    Eğer bu ayarı yapmazsanız,
    .NET'te Config Dosyasını Harici Kaynakla Beslemek.PNG
    görüntüde ki hatayla karşılaşırsınız…

    System.Configuration.ConfigurationErrorsException: ‘Unable to open configSource file ‘Configs\\MailBilgileri.config’.’

Bunların dışında yukarıda yapmış olduğumuz işlemin sağlamasını da yaparsak eğer;

        static void Main(string[] args)
        {
            Console.WriteLine($"Adı : {ConfigurationManager.AppSettings["Ad"]}\nSoyadı : {ConfigurationManager.AppSettings["Soyad"]}\nE-Posta : {ConfigurationManager.AppSettings["EPosta"]}");
            Console.Read();
        }

.NET'te Config Dosyasını Harici Kaynakla Beslemek.PNG
Evet…
Bu tarz bir yaklaşımla configürasyon dosyalarımızı daha anlaşılır ve düzenli bir şekilde organize edeceğimiz kanaatindeyim.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*