Вопрос

У меня есть 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 или чего-то еще.Моим предпочтительным решением было использовать библиотеки configuration Manager и тому подобное.

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

Это было полезно?

Решение 2

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

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

Другие советы

Тот Самый 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);

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

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top