Implementing Plugin Architecture - Carga dinámica de DLL

Tengo una aplicación que es básicamente un diseñador con controles precargados donde puedes diseñar tus páginas usando los controles.

Estoy planeando lanzar más y más controles en el futuro. No quiero lanzar una nueva compilación para controles recién agregados ya que tiene sus desventajas. Así que estaba pensando en un tipo de arquitectura de complemento / complemento donde simplemente libero el complemento / complemento por separado, que pueden instalar y obtener los controles dentro del diseñador.

Ahora estoy usando archivos xml como complementos para especificar los controles, sus comportamientos, sus estilos, etc. Cada xml (complemento) representa un solo control. Pero me resulta muy difícil implementar esto, ya que tengo que escribir un analizador genérico para leer todos los complementos.

En cambio, ¿puedo liberar un dll para cada complemento que me da más control para escribir código para definir el comportamiento / aspecto del control y cargarlo dinámicamente a través del motor principal? Si es así, ¿cómo puedo verificar los dlls y cargarlo dinámicamente en mi aplicación?