Как: использовать ConfigurationSection без загрузки через вызов GetSection

Я хотел бы загрузить определенный ConfigurationSection, но способ, которым CLR загружает сборки, доставляет мне некоторые проблемы:

Мое определение CustomConfigurationSection относится к конкретной сборке, которая не может быть найдена общим процессом загрузки сборки, поскольку я использую внешний инструмент, который в основном загружает мою сборку, обнаруживает некоторую информацию о ней с помощью отражения и затем пытается «установить» ее. Очень похоже на installutil при попытке установить службу Windows.

Я схожу с ума, потому что ConfigurationManager пытается найти необходимую сборку для моего ConfigurationSection в месте расположения исходного процесса. Я знаю это точно, так как использую SysInternals Process Monitor. Может ли кто-нибудь предоставить обходной путь или направления?

Спасибо!

14.12.2008 19:48:20
4 ОТВЕТА
РЕШЕНИЕ

Если вы знаете путь к вашей сборке, вам следует попробовать ConfigurationManager.OpenExeConfiguration (exePath).

1
17.12.2008 20:02:28

Если ваша сборка необходима для десериализации вашего пользовательского раздела конфигурации, но CLR не может найти сборку, то я думаю, что вам не повезло (или я неправильно понимаю проблему?).

Есть ли способ, которым вы можете заставить CLR найти вашу сборку (возможно, с указанием пути подсказки)? Если нет, возможно, вам лучше использовать отдельный XML-файл для этих данных, а не app.config / web.config.

0
14.12.2008 20:05:30
Согласен. Это именно моя проблема. Может быть, я разберусь сам, я просто хотел быть последовательным и делать это "dotnettish" способом :(
ciriarte 15.12.2008 07:02:21

Почему вы пытаетесь получить доступ к разделу конфигурации до того, как ваша сборка (которая определяет раздел конфигурации) была загружена? Вы используете раздел конфигурации, чтобы определить, где находится ваша сборка? Если это так, то вы играете с круговыми ссылками.

Код для определения пользовательского раздела конфигурации может быть очень автономным. Это может быть собственная сборка. Я бы предложил разделить этот код в его собственную сборку и установить его в GAC или в пути выполнения. Я не знаю, зачем вам нужен внешний инструмент для «загрузки» кода, необходимого для чтения пользовательского раздела конфигурации.

0
1.01.2009 00:45:41

Я сталкиваюсь с подобной проблемой. Несколько DLL загружаются в основное приложение dynamiccaly. Некоторые из этих DLL требуют файл конфигурации, и я использую ConfigurationManager по умолчанию для обработки этого. Я могу успешно получить правильный файл (на основе имени библиотеки, в котором стоит «.config») и использовать настройки из AppSettings и ConnectionStrings.

Сейчас я пытаюсь загрузить пользовательский раздел конфигурации. Среда выполнения жалуется на то, что тип раздела не найден в DLL. Я указал правильную DLL в файле конфигурации (в записи configSections), и я знаю, что DLL загружается, потому что эта DLL на самом деле сам плагин. Но все равно; похоже, что среда выполнения использует только типы из каталогов GAC / bin для поиска разделов конфигурации.

Итак, вкратце: я пытаюсь загрузить пользовательский раздел конфигурации, который указан в той же DLL, что и код, который пытается загрузить его, но он не работает.

0
16.07.2009 10:33:58