Как читать метаданные MEF в плагине DLL, не копируя всю DLL в память?

Фон:

Я заинтересован в использовании MEF для предоставления подключаемой архитектуры в приложении WinForm, использующем C # с .NET 4.0, но мне не совсем понятны некоторые вещи.

Во-первых: я еще совсем не работал со сборкой DLL в C #, и я немного размышляю о концепции сборок DLL и о том, как DLL обычно загружается в память (то есть, сразу или по мере необходимости)

Намерение:

Программа будет представлять собой аппаратную платформу управления оборудованием и будет состоять из основного графического интерфейса WinForm, который представляет собой универсальную среду с базовыми панелями инструментов, меню и т. Д., Но без объемного содержимого графического интерфейса. (Подумайте: MDI Parent, но не на самом деле).

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

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

Цель состоит в том, чтобы позволить пользователю выбрать плагин из меню, а затем после выбора загрузить и запустить плагин, который затем заполнит в основном пустой основной графический интерфейс панелями, меню и наборами инструментов.

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

Вот вопросы:

С помощью MEF, если я попытаюсь прочитать метаданные из каждой из множества больших DLL, которые хранятся в папке подключаемого модуля, будет ли вся DLL скопирована в память до того, как будут получены значения метаданных?

Если так, есть ли способ открыть каждый файл DLL и только прочитать метаданные в память, чтобы построить начальное меню - затем позже загрузить всю выбранную DLL через MEF?

Я предполагаю, что типичные шаблоны DirectoryCatalog и AggregateCatalog для чтения плагинов через MEF будут копировать все обнаруженные библиотеки DLL в память и сохранять их в коллекции каталога.

Содержат ли библиотеки DLL один непрерывный блок кода (сборку) или они могут содержать несколько отдельных блоков, которые индексируются и копируются в память по мере необходимости (несколько сборок)?

Я, наверное, не разбираюсь в основах, а может и путаю термины. Я был бы признателен за понимание поведения MEF, DLL и сборок в целом. Спасибо !

Ответы на вопрос(1)

Ваш ответ на вопрос