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)); } } } } }