/// <summary> /// из файла конфигурации. /// Выполнено с учетом нескольких команд в файла конфигурации. /// </summary> /// <returns>Результат разбора</returns> public static Assembly LoadPlugin(string relativePath) { Assembly rc = null; // Navigate up to the solution root string root = Path.GetFullPath(Path.Combine( Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName( Path.GetDirectoryName(typeof(CommandLineSample).Assembly.Location))))))); string pluginLocation = Path.GetFullPath(Path.Combine(root, relativePath.Replace('\\', Path.DirectorySeparatorChar))); if (!string.IsNullOrEmpty(pluginLocation)) { // Loading commands from: CMDPluginLoadContext loadContext = CMDPluginLoadContext.CreateInstance(pluginLocation); AssemblyName an = new AssemblyName( Path.GetFileNameWithoutExtension(pluginLocation)); if (an != null && loadContext != null) // { rc = loadContext.LoadFromAssemblyName(an); } } return(rc); }
/// <summary> /// Выбираем объект или создаем объект если нет подходящего /// </summary> /// <param name="pluginPath">библиотека с именем и путем</param> /// <returns></returns> static public CMDPluginLoadContext CreateInstance(string pluginPath) // { CMDPluginLoadContext rc = ListPluginLoadContext.FirstOrDefault( (pn => pn._pluginPath == pluginPath)); if (rc == null) // { // нет с таким путем rc = new CMDPluginLoadContext(pluginPath); if (rc.IsAssemblyDependencyResolver) // создали нормально { ListPluginLoadContext.Add(rc); } else // создали не нормально { rc = null; } } return(rc); }
/// <summary> /// Сравнить на равенство /// </summary> /// <param name="other">величина для сравнения</param> /// <returns>результат сравнения</returns> public bool Equals(CMDPluginLoadContext other) { return(this._resolver.Equals(other._resolver)); }