Soru Başka bir Exe App.Config alın


Benim bir exe var App.Config dosya. Şimdi, bazı işlevler tüketmek için exe etrafında bir sarmalayıcı dll oluşturmak istiyorum.

Soru sarıcı dll gelen exe app.config özelliğine nasıl erişebilirim?

Belki de sorularımda biraz daha fazla olmalıyım, exe ile aşağıdaki app.config içeriğine sahibim:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="myKey" value="myValue"/>
  </appSettings>
</configuration>

Soru sarmalayıcı dll "myValue" almak nasıl?


Çözümünüz için teşekkürler.

Aslında ilk konseptim, XML dosya okuma yönteminden veya LINQ'den veya herhangi birinden kaçınmaktı. Tercih ettiğim çözüm benim yapılandırma yöneticisi kitaplıkları ve benzerleri.

Normalde app.config özelliklerine erişimle ilişkili sınıfları kullanan herhangi bir yardım için teşekkür ederiz.


21
2017-09-10 07:05


Menşei




Cevaplar:


ConfigurationManager.OpenMappedExeConfiguration Yöntemi Bunu yapmana izin verecek.

MSDN sayfasından örnek:

static void GetMappedExeConfigurationSections()
{
    // Get the machine.config file.
    ExeConfigurationFileMap fileMap =
        new ExeConfigurationFileMap();
    // You may want to map to your own exe.comfig file here.
    fileMap.ExeConfigFilename = 
        @"C:\test\ConfigurationManager.exe.config";
    System.Configuration.Configuration config =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
        ConfigurationUserLevel.None);

    // Loop to get the sections. Display basic information.
    Console.WriteLine("Name, Allow Definition");
    int i = 0;
    foreach (ConfigurationSection section in config.Sections)
    {
        Console.WriteLine(
            section.SectionInformation.Name + "\t" +
        section.SectionInformation.AllowExeDefinition);
        i += 1;

    }
    Console.WriteLine("[Total number of sections: {0}]", i);

    // Display machine.config path.
    Console.WriteLine("[File path: {0}]", config.FilePath);
}

EDIT: Bu "myKey" değerini çıkarmalı:

ExeConfigurationFileMap fileMap =
    new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = 
    @"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
    ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
    ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);

22
2017-09-10 07:14



Merhaba Espo, öneriniz harikaydı. Ama belki de aradığım şey biraz farklıydı. Sorumu daha açık olması için düzenledim. - Graviton
Şimdi gerekli anahtar / değeri nasıl çıkarabileceğinize dair bir örnek ekledim. - Espo


Bazı testlerden sonra bunu yapmanın bir yolunu buldum.

  1. App.Config dosyasını test projesine ekleyin. "Bağlantı olarak ekle" seçeneğini kullanın.
  2. kullanım System.Configuration.ConfigurationManager.AppSettings["myKey"] değere erişmek için.

5
2017-09-10 11:00



Zaten yapmadıysan +1 bu cevabı gönderirdi. Bu, aynı zamanda, bir projede farklı projelere yayılmış yapılandırma dosyaları ile ilgili diğer bazı senaryolar için de iyi bir çözümdür. - takrl
İşte nasıl bağlantı olarak ekle - Words Like Jared


Bence aradığın şey:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

3
2017-09-10 08:38





Bu bir xml dosyası, ilgili bilgileri ayrıştırmak için Linq-XML veya DOM tabanlı yaklaşımları kullanabilirsiniz.
(Bu ne olursa olsun daha iyi bir tasarım olmadığını sorgulayabileceğimi söyledi. Elde etmeye çalışıyorsun.)


0
2017-09-10 07:13





Gishu'nun başka bir yolunun olduğuna inanıyorum. EXE EXE dışarı ortak / "kamu" bölümünü abstact için daha iyi olmazdı Bunu çalıştırmak için bir sarıcı EXE oluşturmak? Bu kesinlikle gelişimin daha alışılmış şeklidir. Sadece tüketmek istediğiniz şeyler DLL'ye girer ve EXE şu anda yaptığı tüm şeyleri yapar, eksi DLL'ye girer.


0
2017-09-10 07:21



Merhaba alastairs, burada bir noktaya sahip olduğunun farkındayım. Ama ben exe içinde mantığı test etmek için bir test derleme olarak sarıcı dll oluşturuyorum. Bu yüzden başka seçeneğim yok :) - Graviton


IDE'ye bir bağlantı eklemek yalnızca geliştirme sırasında yardımcı olacaktır. Bence lomaxx'in doğru fikri var: System.Configuration.ConfigurationManager.OpenExeConfiguration.


-1
2017-09-10 11:13



Denedim ama işe yaramadı. - Graviton