2010-11-02 19 views
5

Yapılandırma dosyalarını yüklemek için OpenMappedExeConfiguration uygulamasını ExeConfigurationFileMap ile kullanıyorum. Aşırı yükleri, sadece dosya isimleriyle çalıştıklarını gösteriyor. Bir akıştan bir yapılandırma dosyası yüklemek için bir yolu var mı?Yapılandırma dosyasını dosya yerine akımdan yükle

Arka plan: Gömülü kaynaklar olarak depolanan yapılandırma dosyalarını yüklemek istiyorum. Dosya gösterimi yok!

cevap

5

No. Sorun, bu sınıfın kendisi yapılandırmayı okumadığıdır. Dosya yolunun kendisi, yapılandırmayı yüklemek için sonunda Configuration sınıfı tarafından kullanılır ve bu sınıf aslında fiziksel bir yol ister.

Tek çözüm, dosyayı geçici bir yoldan depolamak ve oradan okumak olduğunu düşünüyorum.

+1

Bazen "Hayır" doğru bir yanıttır :-) –

+0

http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx bir alıntı bir "fiziksel" yol gereksinimini gösterir. : “Yapılandırma sınıfı örneği, belirli bir fiziksel varlık için geçerli olan tüm yapılandırma dosyalarından yapılandırma ayarlarının birleştirilmiş görünümünü temsil eder” –

4

Evet. Uygulamanız uygulama klasöründeki dosyaları değiştirebilirse - *.config dosyasını, IO işlemlerinin dosyalarına göre veya "bölüm update/save/refresh" yaparak güncelleştirin. Bu çözümde düz ileri mantık var - uzaktan yapılandırmaya sahip olmak mı istiyorsunuz? Uzaktan al, yerel güncellemeli ve al.

Numune: Kayıtlarda wcfsections.test.config (tabi herhangi bir uzak kaynak mümkündür) da wcf bölümünün grup (<bindings>, <behaviors> .. vs.) saklanabilir ve "aşırı" conf dosyası yapılandırması isteyen var diyelim. güncellemeler sipariş wcf doğrulama alt sistem için önemlidir:

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     ConfigurationSectionCollection sections = ServiceModelSectionGroup.GetSectionGroup(config).Sections; 
     sections.Clear(); 

     string fileName = ((GeneralSettings)ConfigurationManager.GetSection("generalSettings")).AppConfigServiceModelSectionFile; 

     XDocument doc = XDocument.Load(fileName); 
     var xmlGroup = (from x in doc.Descendants("system.serviceModel") select x).FirstOrDefault(); 

     string[] sectionsInUpdateOrder = { "bindings", "comContracts", "behaviors", "extensions", "services", "serviceHostingEnvironment", "client", "diagnostics" }; 
     foreach (string key in sectionsInUpdateOrder) 
     { 
      var e = (from x in xmlGroup.Elements(key) select x).FirstOrDefault(); 
      if (e != null) 
      { 
       ConfigurationSection currentSection = sections[e.Name.LocalName]; 
       string xml = e.ToString(); 
       currentSection.SectionInformation.SetRawXml(xml); 
      } 
     } 
     config.Save(); 
     foreach (string key in sectionsInUpdateOrder) 
      ConfigurationManager.RefreshSection("system.serviceModel/" + key); 

Not: Daha sonra Configration güncelleme/kaydetme/yenileme kodu gibi görünüyor. Yanlış sırada güncellerseniz, doğrulama istisnası alabilirsiniz.

İlgili konular