/// <summary> /// Осуществляет перечисление сборок в папке <see cref="LibraryDirectory"/>. /// </summary> /// <param name="callbackAfterLoad">Если задано, то вызывается для сборки, если callbackBeforeLoad не задано или возвратило true.</param> /// <param name="callbackBeforeLoad">Если задано, то вызывается для каждой найденной сборки. Если возвращает false, то обработка этоЙ сборки прекращается.</param> /// <param name="enumerateAttrs">Указывает, какие библиотеки следует включить в перечисление.</param> /// <param name="nameForLogging"></param> /// <param name="tasksAllowed"></param> public static IEnumerable <TResult> Enumerate <TResult>(Func <Assembly, TResult> callbackAfterLoad, Func <string, bool> callbackBeforeLoad = null, EnumerateAttrs enumerateAttrs = EnumerateAttrs.ExcludeMicrosoft | EnumerateAttrs.ExcludeSystem, string nameForLogging = null, bool tasksAllowed = false) { var results = new HashSet <TResult>(); var measure = new MeasureTime(); try { Action <Assembly> action = (a) => { var result = callbackAfterLoad(a); if (result != null) { results.Add(result); } }; var dddddd = new Reflection.LibraryEnumerator(action, callbackBeforeLoad, enumerateAttrs, GlobalAssemblyFilter, LoggingOptions, nameForLogging, tasksAllowed); dddddd.Enumerate(); } catch (Exception) { } finally { if (!_isFirstFullEnumeration) { _isFirstFullEnumeration = true; if (LoggingOptions.HasFlag(eLoggingOptions.EnumerationSummaryFirstRun)) { Debug.WriteLine("LibraryEnumeratorFactory.Enumerate: First enumeration ends with {0}ms", measure.Calculate().TotalMilliseconds); } } } return(results); }
/// <summary> /// Осуществляет перечисление сборок в папке <see cref="LibraryDirectory"/>. /// </summary> /// <param name="callbackAfterLoad">Если задано, то вызывается для сборки, если callbackBeforeLoad не задано или возвратило true.</param> /// <param name="callbackBeforeLoad">Если задано, то вызывается для каждой найденной сборки. Если возвращает false, то обработка этоЙ сборки прекращается.</param> /// <param name="enumerateAttrs">Указывает, какие библиотеки следует включить в перечисление.</param> /// <param name="nameForLogging"></param> /// <param name="tasksAllowed"></param> public static void Enumerate(Action <Assembly> callbackAfterLoad, Func <string, bool> callbackBeforeLoad = null, EnumerateAttrs enumerateAttrs = EnumerateAttrs.ExcludeMicrosoft | EnumerateAttrs.ExcludeSystem, string nameForLogging = null, bool tasksAllowed = false) { var measure = new MeasureTime(); try { var dddddd = new Reflection.LibraryEnumerator(callbackAfterLoad, callbackBeforeLoad, enumerateAttrs, GlobalAssemblyFilter, LoggingOptions, nameForLogging, tasksAllowed); dddddd.Enumerate(); } catch (Exception) { } finally { if (!_isFirstFullEnumeration) { _isFirstFullEnumeration = true; if (LoggingOptions.HasFlag(eLoggingOptions.EnumerationSummaryFirstRun)) { Debug.WriteLine("LibraryEnumeratorFactory.Enumerate: First enumeration ends with {0}ms", measure.Calculate().TotalMilliseconds); } } } }