При ближайшем рассмотрении, нет ничего плохого в создании заголовков таблиц Named Ranges. Это потому, что такие имена присваиваются структурированной ссылке, а не необработанному адресу ячейки, , поэтому они будут перемещаться вместе со столбцом!
С другой стороны, это имя не печатается в поле адреса (по крайней мере, в Office 2007) при выборе заголовка, что довольно неудобно (потому что я не могу быстро найти имя, которое я должен набрать в код, чтобы получить этот столбец).
В целом стратегия должна работать. Вызов Assembly.LoadFrom загрузит целевую сборку в процесс. Оттуда можно проводить проверку типов и создавать экземпляры этих типов.
Я думаю, что самый простой и надежный способ создания экземпляра - это использовать метод Activator.CreateInstance.
For Each def As Type in ClassDefs
Dim inst = Activator.CreateInstance(def)
PluginsData.Add(new LoadedPluginsInfo(inst.Plugin(), False))
Next
В зависимости от ваших целей, другим предложением было бы переместить блок Try / Catch в цикл, а не из него. Наличие блока Try / Catch снаружи цикла означает, что если какой-либо конкретный тип в сборке имеет ошибку, вы отбрасываете все типы из этой сборки. Перемещение внутрь позволит вам отбросить только те типы, которые не работают должным образом. Хотя текущее поведение может быть вашим намерением.
Это должно сработать, я уже использовал подобные вещи в некоторых проектах раньше. Я специально искал конструктор и вызывал его, но помимо этого это была та же идея.
Но вы можете захотеть взглянуть на MEF , который позаботится о МНОМ для вас о плагине архитектура (если вы готовы немного подождать релизную версию, это пока CTP).