COM завернутый файл конфигурации .Net dll - PullRequest
3 голосов
/ 21 апреля 2011

У меня есть библиотека компонентов .net (dll), которую я успешно завернул в COM (используя regasm). Компоненту .net требуется информация о конфигурации.

В мире .Net это легко решается через app.config. Я могу взять конкретные настройки для этой dll и добавить их в web.config или exe.config, чтобы при использовании dll в программе или в Интернете он мог получить доступ к необходимой информации о конфигурации.

Таким образом, мой вопрос, когда я вызываю его через COM (скажем, через страницу ASP или даже через VBScript), могу ли я и как мне использовать файл конфигурации? В идеале я бы не стал жестко кодировать определенные элементы.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011
1 голос
/ 21 апреля 2011

Проблема в том, что при активации COM по умолчанию ваш управляемый компонент запускается в домене приложений по умолчанию, который наследует свое имя конфигурации от хоста .exe (например, если вы работаете в cscript.exe, он хочет найти cscript. exe.config рядом с cscript.exe, который вам не принадлежит). Самый простой способ решить эту проблему - создать управляемую прокладку, которая раскручивает новый домен приложений, затем загружает сборку туда, указывает файл XXX.dll.config, который вы хотите использовать в объекте AppDomainSetup, затем создает и возвращает объект в новый домен приложений. По сути, это означает, что вам нужно создать небольшой управляемый объект фабрики, который гарантирует, что .NET запущен и работает, и что ваш новый домен приложений был создан (желательно только один раз - используйте существующий домен, если создаете второй объект в том же процессе), а затем возвращает управляемый объект размещен в нужном месте. Вы можете сделать процесс полностью прозрачным, если вы хотите написать неуправляемую оболочку, которая полностью реализует фабрику классов COM, но это немного более продвинуто ...

0 голосов
/ 21 апреля 2011

Будет ли звонящий / создатель COM-объекта знать, где находится файл конфигурации? Например, может ли разоблачение функции типа «Load (path)» добиться цели, или вы имеете в виду что-то другое?

...