C # - доступ динамически загружаемой сборки к ссылкам на родительские сборки

Я пытаюсь реализовать архитектуру в стиле подключаемого модуля. Есть основные, внешние библиотеки, используемые как плагинами, так и в основном приложении. Хорошим примером такой библиотеки является JSON.NET.

При разработке подключаемых модулей я ссылаюсь на ту же версию JSON.NET, на которую ссылается основное приложение. Когда подключаемый модуль скомпилирован, я не выполнял слияние внешних библиотек с подключаемым модулем, поскольку ожидал, что ссылки будут разрешаться в одни и те же сборки, загруженные основным приложением.

Однако это не работает. Когда я пытаюсь вызвать методы подключаемого модуля в основном приложении, я получаю ошибку «не удалось загрузить сборку ...».

Как заставить динамически загружаемые плагины разрешать ссылки на ссылки основного приложения?


person user163757    schedule 22.11.2013    source источник
comment
Никогда не используйте Assembly.LoadFile ()   -  person Hans Passant    schedule 23.11.2013
comment
Assembly.LoadFrom (путь) .... Предполагая, что ваше MainApp ссылается на сборку с общими типами, которые плагин должен реализовать ...   -  person terrybozzio    schedule 23.11.2013


Ответы (1)


Несколько соображений:

  • Спроектируйте свою архитектуру так, чтобы вам не требовались внутренние ссылки из базовой системы. В примере вы можете создать оболочку для необходимых функций в ядре, которую можно использовать в плагинах.
  • в случае .NET 4.0+: отключение ключевого слова dynamic
  • используя отражение
  • Компиляция во время выполнения
person Philipp Sigrist    schedule 22.11.2013