Можно ли получить доступ к файлу app.config, когда exe используется как dll?

У меня есть приложение командной строки, которое считывает некоторые настройки из файла app.config, используя обычные свойства Properties.Settings.blabla.

Это приложение также используется в качестве dll.

Когда я использую его как dll, он игнорирует любой файл foo.exe.config, который я добавляю в каталог. Он не генерирует исключение, как я ожидал, при использовании методов, которые обращаются к файлу конфигурации, но и не принимает файл конфигурации.

Есть ли способ заставить exe-файл, который используется в качестве dll, использовать свой собственный файл настроек, и при этом использовать файл app.config при использовании exe-файла? Я не хочу менять код потребителя и хочу как можно меньше влиять на исполняемый код.

Я видел решения, использующие метод ConfigurationManager.OpenMappedExeConfiguration или OpenExeConfiguration. Использует ли решение эти методы внутри исполняемого кода? Таким образом, он всегда будет искать файл конфигурации, независимо от того, используется ли он как dll или exe?


person Juancentro    schedule 09.12.2011    source источник


Ответы (1)


Если вы хотите это сделать, вам нужно будет прочитать именно этот файл. Исполняемый файл .NET читает из собственного app.config файла. Код библиотеки всегда считывается из файла app.config для выполняемого приложения... даже код библиотеки, который случайно был скомпилирован в файл с расширением .exe.

Редактировать для выделения/пояснения Когда я говорю о файле app.config, я, конечно же, имею в виду правильно переименованный файл [program.exe.config].

person Andrew Barber    schedule 09.12.2011
comment
В настоящее время я использую .dll для вызова, например, имя конфигурационного файла — jobs.config, но мы создали класс WorkerAgent, который наследуется от таких вещей, как System.Configuration.ConfigurationSettings. Пробовали ли вы просматривать файл .config с таким же именем? как имя вашего .dll/консольного приложения во время выполнения, оно не смотрит на app.config - person MethodMan; 10.12.2011
comment
Итак, давайте использовать пример, чтобы сделать вещи более ясными. Предположим, у меня есть приложение с именем myapp и библиотека с именем mylib. mylib — это исполняемый файл (который на самом деле может выполняться сам по себе), но на него ссылается myapp. mylib использует обычный файл Properties.Settings.blabla для чтения из файла конфигурации. Если во время выполнения myapp вызывается метод из mylib, который использует Properties.Settings.blabla, откуда он будет читать? myapp.exe.config или mylib.exe.config?? Из вашего ответа я предполагаю, что он будет считываться из myapp.exe.config, верно? А что, если этой настройки там нет? - person Juancentro; 19.12.2011
comment
@Juancentro Ваше предположение верно; поскольку в этом случае myapp.exe является исполняемой в данный момент программой, конфигурация будет считана из myapp.exe.config. Я не знаю навскидку, что было бы, если бы, следовательно, соответствующая конфигурация для настроек отсутствовала; Я ожидаю либо исключение, связанное с отсутствующей конфигурацией, либо загрузку значений по умолчанию (нули или null, что в любом случае может вызвать исключения) - person Andrew Barber; 19.12.2011