6

ConfigurationManager.AppSettings edilecek ve bunun altındaki bölümler. Ama ne olursa olsun işler ya da daha iyi önerilerden memnun olurum. Şimdi bu benim dilek düşürdük:app.config: Ben yapabilirim nasıl iç içe bir customSection denilen appSettings benim istenen app.config böyleolacağını

<configSections> 
    <sectionGroup name="QA_Environment"> 
     <section name="appSettings" type="System.Configuration.NameValueSectionHandler"/> 
    </sectionGroup> 
    <sectionGroup name="Production_Environment"> 
     <section name="appSettings" type="System.Configuration.NameValueSectionHandler"/> 
    </sectionGroup> 
</configSections> 

Ve ben kök düzeyi AppSettings'i olarak bu bölümlerden birine yerine eğer bunu merak ediyorum ana şey olduğunu ... gayet galiba ... Bunları yinelemeden ve program aracılığıyla ekleme veya oluşturma ve kaydetme olmadan. Sadece kullanıcının bir ortam seçebilmesini istiyorum, select olayı appSettings'i değiştirecek ...

Karşı karşıya kaldığım bir kısıtlama, referans ettiğim veri katmanının onunla aynı kalması gerektiğidir. .... bu yüzden temelde benim app.config bu diğer projeler şu anda tam olarak böyle erişilebilir olması lazım olduğunu ... bu ConfigurationManager.AppSettings [afdasdf]

bu türlü açıklamayı ihtiyacı varsa bana bildirin olduğunu ... teşekkürler

cevap

4

Eğer sorun varsa, buradan devam edip kendi sorumu yanıtlayacağım. Onu gerçekten olduğundan daha zor yaptığımı keşfettim.

<?xml version="1.0" encoding="utf-8"?> 

<configSections> 
    <sectionGroup name="Environment"> 
     <sectionGroup name="QA"> 
      <section name="databases" type="System.Configuration.DictionarySectionHandler"/> 
      <section name="storageSystems" type="System.Configuration.DictionarySectionHandler"/> 
     </sectionGroup> 
     <sectionGroup name="PROD"> 
      <section name="databases" type="System.Configuration.DictionarySectionHandler"/> 
      <section name="storageSystems" type="System.Configuration.DictionarySectionHandler"/> 
     </sectionGroup> 
    </sectionGroup> 
</configSections> 

<Environment> 
    <QA> 
     <databases> 
     </databases> 
     <storageSystems> 
     </storageSystems> 
    </QA> 

    <PROD> 
     <databases> 
     </databases> 
     <storageSystems> 
     </storageSystems> 
    </PROD> 
</Environment> 

Yani benim app.config parçası var .... Gerisi kolaydır: Tek yapmanız gereken tek şey bu

private void GetConfigurationSettings(TargetEnvironments targetEnvironment) 
    { 
     var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     var databases = new Hashtable(); 
     var storageSystems = new Hashtable(); 

     switch (targetEnvironment) 
     { 
      case TargetEnvironments.QA: 
       databases = (Hashtable)ConfigurationManager.GetSection("Environment/QA/databases"); 
       storageSystems = (Hashtable)ConfigurationManager.GetSection("Environment/QA/storageSystems"); 
       break; 
      case TargetEnvironments.PROD: 
       databases = (Hashtable)ConfigurationManager.GetSection("Environment/PROD/databases"); 
       storageSystems = (Hashtable)ConfigurationManager.GetSection("Environment/PROD/storageSystems"); 
       break; 
     } 

     foreach (string key in databases.Keys) { config.AppSettings.Settings.Add(key, databases[key].ToString()); } 
     foreach (string key in storageSystems.Keys) { config.AppSettings.Settings.Add(key, storageSystems[key].ToString()); } 

     config.Save(ConfigurationSaveMode.Modified); 

     ConfigurationManager.RefreshSection("appSettings"); 

     UpdateCollections(); 
    } 

Not Belirlediğiniz ayarları hemen yüklemek için config.Save yönteminin açıkçası önemli kullanımı. Bunun dışında, aslında sadece karar vermek zorunda olduğum yol adları ve bölüm türü. Aşağıdaki bağlantıyı en kullanışlı olarak buldum. Birinin daha zarif bir yolu varsa, bunu duymak isterim.

Here's the place I got the most out of in my research

2

Dağıtım özel web.config dosyaları ile uğraşmanın başka bir yolu vardır. Düzenleme komutlarını açıklayan web.config dosyalarını, temel web.config dosyasına (her şeyi tekrarlamak yerine) tanımlayabilirsiniz. this SO question için cevaplara bir göz atın.

Temel olarak, projelerinizi dağıttığınızda temel web.config dosyasıyla birleştirilen bir web.debug.config ve bir web.release.config dosyası tanımlayabilirsiniz.