public static void TryActivatePlugins(List <OptionsInformation.PluginDllInfo> pluginDll) { for (int index = 0; index < pluginDll.Count; index++) { try { Log.Info("Trying load .dll at {0}", pluginDll[index].Path); // make full path var fullfn = System.IO.Path.GetFullPath(pluginDll[index].Path); // Note: use LoadFrom instead of LoadFile, insane: // https://stackoverflow.com/questions/36075829/ // assembly-loadfile-look-dependencies-in-location-of-executeable var asm = Assembly.LoadFrom(fullfn); var tp = asm.GetType("AasxIntegrationBase.AasxPlugin"); if (tp == null) { Log.Error("Cannot find class AasxIntegrationBase.AasxPlugin within .dll."); continue; } // create instance using late binding IAasxPluginInterface ob = (IAasxPluginInterface)Activator.CreateInstance(tp); if (ob == null) { Log.Error("Cannot create instance from class AasxIntegrationBase.AasxPlugin within .dll."); continue; } // create plugin var pi = PluginInstance.CreateNew(index, asm, tp, ob, pluginDll[index].Args); if (pi == null) { Log.Error( "Cannot invoke methods within instance from " + "class AasxIntegrationBase.AasxPlugin within .dll."); continue; } // init plug-in var singleArg = new object[] { pluginDll[index].Args }; pi.BasicInvokeMethod("InitPlugin", singleArg); // adding Log.Info(".. adding plugin {0}", pi.name); LoadedPlugins.Add(pi.name, pi); } catch (Exception ex) { Log.Error(ex, $"Trying activate plugin index {index}"); } } }