Returns all types owned by this assembly.
(Assembly assembly)
| 1608 | /// Returns all types owned by this assembly. |
| 1609 | /// </summary> |
| 1610 | private static Type[] GetAssemblyTypes(Assembly assembly) |
| 1611 | { |
| 1612 | var referencedAssemblies = assembly.GetReferencedAssemblies(); |
| 1613 | var allAssemblies = Utils.GetAssemblies(); |
| 1614 | var referencedTypes = new List<string>(); |
| 1615 | foreach (var assemblyName in referencedAssemblies) |
| 1616 | { |
| 1617 | var asm = allAssemblies.FirstOrDefault(x => x.GetName().Name == assemblyName.Name); |
| 1618 | if (asm == null) |
| 1619 | continue; |
| 1620 | referencedTypes.AddRange(asm.DefinedTypes.Select(x => x.FullName).ToArray()); |
| 1621 | } |
| 1622 | |
| 1623 | // TODO: use MetadataReader to read types without loading any of the referenced assemblies? |
| 1624 | // https://makolyte.com/csharp-get-a-list-of-types-defined-in-an-assembly-without-loading-it/ |
| 1625 | |
| 1626 | // We need private types of this assembly too, DefinedTypes contains a lot of types from other assemblies... |
| 1627 | var types = referencedTypes.Any() ? assembly.DefinedTypes.Where(x => !referencedTypes.Contains(x.FullName)).ToArray() : assembly.DefinedTypes.ToArray(); |
| 1628 | |
| 1629 | #if FLAX_EDITOR |
| 1630 | Assert.IsTrue(Utils.GetAssemblies().Count(x => x.GetName().Name == "FlaxEngine.CSharp") == 1); |
| 1631 | #endif |
| 1632 | return types; |
| 1633 | } |
| 1634 | |
| 1635 | internal static TypeHolder GetTypeHolder(Type type) |
| 1636 | { |