Проблема с чтением DLL ConfigurationSection при вызове через ссылку на службу

У меня есть проект (A), ссылающийся на службу (B) через. Справочник по сервису.

Эта служба (B) имеет ссылку на DLL (давайте назовем ее Business.dll)

Эта DLL имеет свой собственный app.config, который имеет некоторую конфигурацию, которая, как я полагаю, будет легко читаться независимо от того, вызывается ли она внутри (как консольное приложение) или извне из службы (B).

В настоящее время это не работает. Файл app.config (точнее, файл Business.dll.config) вообще не читается, и:

(BusinessConfigurationSection)ConfigurationManager.GetSection("GroupName/SectionName");

всегда имеет значение null при вызове из проекта (A). Могу ли я не сохранять файл Business.dll.config в каталоге bin службы (B) или я делаю что-то, что просто невозможно? Есть ли лучший способ сделать это?

Спасибо.


person Mani5556    schedule 09.10.2013    source источник


Ответы (2)


Вы можете загрузить определенный файл конфигурации следующим образом:

Configuration config;
ExeConfigurationFileMap ecfm = new ExeConfigurationFileMap();
ecfm.ExeConfigFilename = <your_config_file_path>;

config = ConfigurationManager.OpenMappedExeConfiguration(ecfm, ConfigurationUserLevel.None);
var mySection = (BusinessConfigurationSection)config.GetSection("GroupName/SectionName");
person Pascalz    schedule 09.10.2013
comment
Будет ли в этом случае доступ к файлу конфигурации из проекта (A) или службы? Я все еще немного смущен этим. - person Mani5556; 09.10.2013
comment
@ Mani5556, где вы хотите, так как вы загружаете его явно - person Pascalz; 09.10.2013
comment
Ну, я загружаю его явно, но все еще загружаю его из бизнес-проекта. - person Mani5556; 09.10.2013

Когда вы звоните из проекта A, ConfigurationManager всегда будет читать из App.config ProjectA, а не из DLL.

Вы можете использовать следующий код, чтобы открыть конфигурацию DLL,

  // Get the configuration file. The file name has 
      // this format appname.exe.config.
      System.Configuration.Configuration config =
        ConfigurationManager.OpenExeConfiguration(dllPath); //dll config
person Rajesh Subramanian    schedule 09.10.2013