コード例 #1
0
        void ReflectClasses(AssemblyDefinition asy, ProjectType projectFrameworkType, String projectFrameworkVersion, ClassEntities classEntities, ActiveProject activeProject)
        {
            if (asy == null)
            {
                throw new ArgumentNullException(nameof(asy));
            }
            if (classEntities == null)
            {
                throw new ArgumentNullException(nameof(classEntities));
            }
            if (!Enum.IsDefined(typeof(ProjectType), projectFrameworkType))
            {
                throw new InvalidEnumArgumentException(nameof(projectFrameworkType), (int)projectFrameworkType, typeof(ProjectType));
            }
            if (string.IsNullOrWhiteSpace(projectFrameworkVersion))
            {
                throw new ArgumentException("Value cannot be null or white space.", nameof(projectFrameworkVersion));
            }
            if (!Enum.IsDefined(typeof(ActiveProject), activeProject))
            {
                throw new InvalidEnumArgumentException(nameof(activeProject), (int)activeProject, typeof(ActiveProject));
            }

            foreach (TypeDefinition type in asy.MainModule.GetTypes())
            {
                if ((type.IsPublic || (activeProject == ActiveProject.Yes && type.IsNotPublic && !type.IsNestedPrivate)) && type.IsClass && !type.IsAbstract && !type.Name.StartsWith("<") && !type.Name.Contains("AnonymousType") && type.Name != "AssemblyInfo" && !type.Name.StartsWith("__"))
                {
                    var previouslyLoaded = false;

                    foreach (var classEntity in classEntities)
                    {
                        if (type.Name == classEntity.ClassName && type.Namespace == classEntity.NamespaceName && asy.Name.Name == classEntity.AssemblyName)
                        {
                            previouslyLoaded = true;
                            break;
                        }
                    }

                    if (!previouslyLoaded)
                    {
                        if (type.BaseType == null || type.BaseType.Name != "MulticastDelegate")
                        {
                            classEntities.Add(new ClassEntity(asy, type, projectFrameworkType, projectFrameworkVersion));
                        }
                    }
                }
            }
        }