private static void FindPlugins() { LogInfo("Finding Plugins"); Type pluginType = typeof(Plugin); List <Assembly> assemblies = AssemblyUtil.BuildAssemblyList(); foreach (Assembly assembly in assemblies) { //LogInfo("Scanning Assembly: " + assembly.GetName().Name); foreach (Type type in assembly.GetTypes()) { if (!type.IsSubclassOf(pluginType)) { continue; } try { Plugin plugin = Activator.CreateInstance(type, true) as Plugin; if (plugin == null) { throw new InvalidCastException("Type is not plugin"); } if (plugin.GetID() == null) { LogInfo(type.FullName + " is missing Plugin ID!"); continue; } if (_plugins.ContainsKey(plugin.GetID())) { continue; } _plugins.Add(plugin.GetID(), plugin); } catch (Exception ex) { string err = ex.Message + "\n" + ex.StackTrace; LogInfo(err); continue; } } } }