Динамическое переключение файла конфигурации (веб-конфигурация или приложение) - PullRequest
0 голосов
/ 28 февраля 2012

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

Существует требование для вызова этой библиотеки DLL в различных конфигурациях из веб-приложения. DLL является сторонней и не может быть изменена.

Попробовал ниже и потерпел неудачу.

  1. Имеют разные копии DLL (названные a.dll, b.dll) и загружают их по отражению. Проблема здесь в том, что он по-прежнему ищет web.config, а не a.dll.config. Кроме того, поскольку на основную программу и на отраженную сборку ссылаются одинаковые типы, это сводит с ума.
  2. Изменение конфигурации на лету с помощью AppDomain.CurrentDomain.SetData("WEB_CONFIG_FILE", @"Config\Path") и переключение обратно после вызова. Проблема здесь в том, что после первого раза он не загружает раздел конфигурации снова, даже если я переключаюсь.
  3. Используйте ConfigurationManager.RefreshSection(@"configuration\mysection") для принудительного обновления. Это, похоже, не работает, и люди говорят, что этот вызов глючит в .NET
  4. Я видел некоторые рекомендации по обновлению web.config, но это может быть не очень хорошим выбором для меня, потому что переключение значений происходит довольно часто

Могу ли я еще что-нибудь сделать?

1 Ответ

2 голосов
/ 28 февраля 2012

Размещайте DLL в отдельном процессе и обменивайтесь данными с помощью COM (или .Net remoting или веб-службы или аналогичной).

т.е. создайте хост-процесс a.exe, используя C # (скажем), который выставляет классы как объекты COM, классы, в свою очередь, вызывают методы / классы DLL. Зарегистрируйтесь как COM-объекты.

Затем создайте b.exe такой же (но с разными CLSID).

Теперь вы можете иметь разные конфигурационные файлы для a.exe и b.exe (в разных папках), но оба могут использовать службы DLL.

Вы также можете сделать нечто подобное, имея два внутренних веб-приложения и используя SOAP или что-то для общения с ними.

Но суть в том, что если DLL работает с web.config, вы должны поместить хотя бы один из них в отдельный процесс в отдельной папке.

...