Правильно найдите сборки обработчика раздела App.config библиотеки DLL.

Я пишу DLL, которая загружается сторонним приложением (исполнитель тестов платформы FitNesse, DLL — это тестовое приспособление).

DLL имеет свой собственный файл App.config (скажем, MyDll.dll.config), и я могу указать FitNesse загрузить этот файл App.config.

Но вот проблема: файл App.config содержит обработчик пользовательского раздела конфигурации, например:

<configuration>

  <configSections>
    <sectionGroup name="myGroup">
        <section name="MySection" type="MyNamespace.MyHandler.MySection, MyNamespace.MyHandler"/>
        ...
    </sectionGroup>
  </configSections>
  ...
</configuration>

Всякий раз, когда читается файл App.config, я получаю исключение о том, что сборка MyNamespace.MyHandler не может быть найдена, хотя она находится в той же папке, что и читаемый файл MyDll.dll.config:

System.TypeInitializationException: инициализатор типа для MyNamespace.MyHandler.MySection вызвал исключение. ---> System.Configuration.ConfigurationErrorsException: произошла ошибка при создании обработчика раздела конфигурации для myGroup/MySection: не удалось загрузить файл или сборку «MyNamespace.MyHandler» или одну из ее зависимостей. Система не может найти указанный файл

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

Есть ли способ указать, где система должна искать библиотеки DLL для интерпретации файла App.config? Мне подойдет как общее решение, так и специальное решение FitNesse.

Заранее большое спасибо за любую помощь!


person Jan    schedule 26.11.2010    source источник


Ответы (2)


Вы можете попробовать использовать раздел времени выполнения, как описано здесь:

http://kbalertz.com/897297/consume-assemblies-located-folder-other-application-folder-Visual-Basic.aspx

person Gregor Slavec    schedule 26.11.2010
comment
Спасибо! Я принимаю этот ответ, потому что он, кажется, решает проблему. Однако мы столкнулись с другими похожими проблемами, поэтому, увы, нам приходится использовать более уродливое решение, которое я добавлю в качестве второго ответа. В любом случае большое спасибо! - person Jan; 29.11.2010
comment
ссылка на kbalertz мертва, у кого-нибудь есть работающая? У меня та же проблема, я не могу загрузить библиотеки DLL, которые находятся в том же месте, что и .config. - person MiloDC; 05.08.2015

Вот еще одно решение, которое мы нашли сами. Хотя решение, представленное Грегором С., действительно позволяет нам читать App.config, позже мы столкнемся с другими проблемами, связанными с рабочим каталогом. Итак, что мы делаем сейчас, так это добавляем приложение FitNesse Runner в качестве ссылки на наш проект, чтобы оно было взято из исходного местоположения и скопировано в папку нашего тестового приложения перед его выполнением.

Это не приятно, но это работает.

person Jan    schedule 29.11.2010
comment
Вы все еще используете тот же подход или уже нашли лучший способ? - person Thaoden; 30.10.2015