private void LoadBinaryComponents(ILoggerFactory loggerFactory, string[] directories, SearchOption searchOption) { var logger = loggerFactory.CreateLogger <DirectoryComponentDescriptionLookup>(); var descriptionReader = new BinaryDescriptionReader(); foreach (string location in directories) { foreach (string file in Directory.GetFiles(location, "*.cdcom", searchOption)) { using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { if (!descriptionReader.Read(fs)) { logger.LogError($"Failed to load {file}"); continue; } foreach (var description in descriptionReader.ComponentDescriptions) { description.Metadata.Location = ComponentDescriptionMetadata.LocationType.Installed; description.Source = new ComponentDescriptionSource(file); foreach (var type in description.GetComponentTypes()) { internalLookup.AddDescription(type, description); } } } } } }
private void LoadCompiledComponents(string directory) { foreach (string file in Directory.GetFiles(directory, "*.cdcom", SearchOption.TopDirectoryOnly)) { using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var binaryLoader = new BinaryDescriptionReader(); if (binaryLoader.Read(fs)) { foreach (var description in binaryLoader.ComponentDescriptions) { description.Metadata.Location = ComponentDescriptionMetadata.LocationType.Installed; description.Source = new ComponentDescriptionSource(file, new System.Collections.ObjectModel.ReadOnlyCollection <ComponentDescription>(new ComponentDescription[] { description })); var type = GetTypeFromDescription(description); AddDescription(type, description); var icon = description.Metadata.Icon as MultiResolutionImage; if (icon != null) { icons.Add(Tuple.Create(type, (ComponentConfiguration)null), icon); } } } } } }