Если сама программа на C# - то лучше и плагины на C# делать, а не накручивать лишнего и не усложнять. Надо просто написать интерфейс
IMyPlugin - и на базе этого интерфейса делается библиотека классов, которая и будет плагином. Данный интерфейс включается как в саму программу, так и в плагин.
/// <summary>
/// Интерфейс плагина
/// </summary>
public interface IMyPlugin
{
/// <summary>
/// Инициализация плагина
/// </summary>
/// <returns></returns>
bool Init();
/// <summary>
/// Завершение работы плагина и освобождение ресурсов
/// </summary>
void Dispose();
void PluginAction1();
void PluginAction2();
}
И так далее - в интерфейсе указываем сигнатуру методов, свойств, событий, которые плагин должен поддерживать 100% и через которые плагин будет взаимодействовать с основной программой.