Получите App.Config другого Exe
У меня есть 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.
Ответы
Ответ 1
После некоторого тестирования я нашел способ сделать это.
- Добавить файл App.Config в тестовый проект. Используйте опцию "Добавить как ссылку".
- Используйте
System.Configuration.ConfigurationManager.AppSettings["myKey"]
для доступа к значению.
Ответ 2
ConfigurationManager.OpenMappedExeConfiguration Method позволит вам сделать это.
Пример страницы 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);
Ответ 3
Я думаю, что вы ищете:
System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
Ответ 4
Это xml файл, вы можете использовать подходы Linq-XML или DOM для анализа соответствующей информации.
(я сказал бы, что сомневаюсь, если нет лучшего дизайна для чего бы то ни было.. вы пытаетесь достичь.)
Ответ 5
Я бы сказал, что второй вопрос Гишу. Не лучше ли абстрагировать общую/ "публичную" часть EXE в DLL, создать оболочку EXE для ее запуска? Это, безусловно, более обычная модель развития. Только материал, который вы хотите использовать, войдет в DLL, и EXE сделает все, что в настоящее время делает, минус то, что попало в DLL.
Ответ 6
Добавление ссылки в IDE поможет только во время разработки. Я думаю, что lomaxx имеет правильную идею: System.Configuration.ConfigurationManager.OpenExeConfiguration.