Получить App.Config другого Exe - PullRequest
       32

Получить App.Config другого Exe

22 голосов
/ 10 сентября 2008

У меня есть exe с файлом App.Config. Теперь я хочу создать dll-оболочку вокруг exe-файла, чтобы использовать некоторые функции.

Вопрос в том, как я могу получить доступ к свойству app.config в exe из оболочки dll?

Может быть, я должен быть немного больше в своих вопросах, у меня есть следующий контент app.config с exe:

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

Вопрос в том, как вытащить «myValue» из оболочки dll?


спасибо за ваше решение.

На самом деле моя первоначальная концепция заключалась в том, чтобы избегать метода чтения XML-файла, LINQ или чего-либо еще. Моим предпочтительным решением было использование библиотек диспетчера конфигурации и т. П. .

Буду признателен за любую помощь, которая использует классы, которые обычно связаны с доступом к свойствам app.config.

Ответы [ 6 ]

23 голосов
/ 10 сентября 2008

Метод ConfigurationManager.OpenMappedExeConfiguration позволит вам сделать это.

Пример со страницы MSDN:

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);
}

РЕДАКТИРОВАТЬ: Это должно вывести значение "myKey":

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);
5 голосов
/ 10 сентября 2008

После некоторого тестирования я нашел способ сделать это.

  1. Добавьте файл App.Config в тестовый проект. Используйте опцию «Добавить как ссылку».
  2. Используйте System.Configuration.ConfigurationManager.AppSettings["myKey"] для доступа к значению.
3 голосов
/ 10 сентября 2008

Я думаю, что вы ищете:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
0 голосов
/ 10 сентября 2008

Добавление ссылки в IDE поможет только во время разработки. Я думаю, что у lomaxx правильная идея: System.Configuration.ConfigurationManager.OpenExeConfiguration.

0 голосов
/ 10 сентября 2008

Я бы высказал мнение Гишу, что есть другой способ. Разве не лучше абсорбировать общую / «публичную» часть EXE-файла в DLL, создать исполняемый файл EXE для его запуска? Это, безусловно, более привычная схема развития. Только то, что вы хотите использовать, попадет в DLL, а EXE сделает все то, что в данный момент делает, за исключением того, что было в DLL.

0 голосов
/ 10 сентября 2008

Это xml-файл, вы можете использовать подходы Linq-XML или DOM для анализа соответствующей информации.
(при этом я бы задал вопрос, если нет лучшего дизайна для чего бы то ни было ... вы пытаетесь достичь.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...