public IPlugin LoadPlugin(PluginDescriptor descriptor) { if (descriptor == null) { throw new ArgumentNullException("descriptor"); } string descriptorPath = Paths.GetDirNameOrPathRoot(descriptor.PluginDescriptorFileName); string fileName = Path.Combine(descriptorPath, descriptor.PluginFileName); Assembly assembly; if (!assemblyCache.TryGetValue(fileName, out assembly)) { assembly = Assembly.LoadFrom(fileName); } IPlugin pluginInstance = (IPlugin)assembly.CreateInstance(descriptor.PluginTypeName); if (pluginInstance == null) { throw new Exception("Could not find given plugin type"); } return(pluginInstance); }