Получить приложение.Конфиг другой ехе
у меня есть exe с . Теперь я хочу создать dll-оболочку вокруг exe, чтобы использовать некоторые функции.
вопрос как я могу получить доступ к приложению.свойство config в exe из библиотеки dll-оболочки?
может быть, я должен быть немного больше в моих вопросах, у меня есть следующее приложение.содержимое config с exe-файла:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="myKey" value="myValue"/>
</appSettings>
</configuration>
вопрос в том, как получить "myValue" из обертки dll файлы?
спасибо за ваше решение.
На самом деле моя первоначальная концепция заключалась в том, чтобы избежать метода чтения XML-файлов или LINQ или что-то еще. Моим предпочтительным решением было использовать библиотеки configuration manager и тому подобное.
Я буду признателен за любую помощь, которая использует классы, которые обычно связаны с доступом к приложению.свойства конфигурации.
6 ответов
на 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);
}
EDIT: это должно вывести значение "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.AppSettings["myKey"]
для доступа к значению.
Я думаю, что вы ищете это:
System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
это xml-файл, вы можете использовать подходы на основе Linq-XML или DOM для анализа соответствующей информации.
(тем не менее, я бы спросил, нет ли лучшего дизайна для того, что это такое.. ты пытаешься достичь.)
Я бы поддержал точку зрения Гишу, что есть другой способ. Не было бы лучше воздержаться от общей/"публичной" части EXE в DLL создать EXE-оболочку для ее запуска? Это, безусловно,более обычная модель развития. Только то, что вы хотите потреблять, войдет в DLL, и EXE будет делать все, что он в настоящее время делает, минус то, что ушло в DLL.
добавление ссылки в IDE поможет только во время разработки. Я думаю lomaxx правильно: System.Configuration.ConfigurationManager.OpenExeConfiguration.