コード例 #1
0
 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>();
         }
     }));
 }
コード例 #2
0
        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)));
        }
コード例 #3
0
 public PlugInAssemblyExport(Exports.IAssembly assembly)
 {
     this.assembly = assembly;
 }
コード例 #4
0
 IEnumerable <ICommandDescriptor> ReadCommandTypes(Exports.IAssembly assembly)
 {
     return(assembly.File.Read(GetCommandsFromAssembly));
 }