private void LoadPluginTypes(List<string> pluginNames, string assemblyName)
{
try {
Assembly pluginAssembly = Assembly.LoadFile(assemblyName);
foreach (Type t in pluginAssembly.GetTypes()) {
if (typeof(ICompilerPlugin).IsAssignableFrom(t)) {
ConstructorInfo constructor = t.GetConstructor(new Type[] { });
if (constructor == null) {
Console.Error.WriteLine("Cannot load plugin type '{0}' because it doesn't have a parameterless constructor", t.Name);
continue;
}
ICompilerPlugin plugin = (ICompilerPlugin)Activator.CreateInstance(t);
if (pluginNames.Contains(plugin.Identifier)) {
Console.WriteLine("Loaded plugin '{0}'", plugin.Name);
_loadedPlugins.Add(plugin);
}
}
}
} catch (Exception ex) {
Console.Error.WriteLine("Failed to load assembly '{0}', {1}", assemblyName, ex.Message);
}
}