IEnumerable <ICommandDescriptor> ReadCommandTypes(Exports.IAssembly assembly) { return(assembly.File.Read(assemblyStream => { try { var module1 = AssemblyDefinition.ReadAssembly((Stream)assemblyStream, new ReaderParameters(ReadingMode.Deferred)).MainModule; return (from type in module1.ExportedTypes where type.IsAbstract == false && type.IsClass let typeDef = type.Resolve() where typeDef.HasGenericParameters == false || typeDef.IsGenericInstance where typeDef.HasInterfaces && typeDef.Interfaces.Any(_ => _.Is <ICommand>()) let commandAttribute = typeDef.GetAttribute <CommandAttribute>() let uiAttribute = typeDef.GetAttribute <UICommandAttribute>() where commandAttribute != null let inputs = ReadInputs(typeDef) select uiAttribute != null ? (ICommandDescriptor) new CecilUICommandDescriptor(typeDef, commandAttribute, uiAttribute, inputs) : (ICommandDescriptor) new CecilCommandDescriptor(typeDef, commandAttribute, inputs) ).ToList(); } catch { return Enumerable.Empty <ICommandDescriptor>(); } })); }
static bool MatchesReferenceSection(Exports.IAssembly assembly) { if (assembly.Package.Descriptor == null || assembly.Package.Descriptor.ReferencedAssemblies == null) { return(true); } var specs = assembly.Package.Descriptor.ReferencedAssemblies.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries) .Select(spec => spec.Trim().Wildcard()); var fileName = assembly.File.Name; return(specs.Any(spec => spec.IsMatch(assembly.AssemblyName.Name) || spec.IsMatch(fileName))); }
public PlugInAssemblyExport(Exports.IAssembly assembly) { this.assembly = assembly; }
IEnumerable <ICommandDescriptor> ReadCommandTypes(Exports.IAssembly assembly) { return(assembly.File.Read(GetCommandsFromAssembly)); }