public static void Setup() { // Get AssemblyListTable and Assembly count Ptr assemblyListTable = Intrinsic.GetAssemblyListTable(); uint assemblyCount = (uint)assemblyListTable.Dereference(0); assemblyListTable.Increment(); Assemblies = new LinkedList <RuntimeAssembly>(); // Loop through and populate the array for (uint i = 0; i < assemblyCount; i++) { // Get the pointer to the Assembly Metadata MDAssemblyDefinition *ptr = (MDAssemblyDefinition *)(assemblyListTable.Dereference(i)); Assemblies.AddLast(new RuntimeAssembly(ptr)); } }
internal RuntimeAssembly(MDAssemblyDefinition *pointer) { assemblyDefinition = pointer; fullName = assemblyDefinition->Name; uint typeCount = assemblyDefinition->NumberOfTypes; typeList = new LinkedList <RuntimeType>(); typeHandles = new LinkedList <RuntimeTypeHandle>(); for (uint i = 0; i < typeCount; i++) { var handle = new RuntimeTypeHandle(); ((uint **)&handle)[0] = (uint *)assemblyDefinition->GetTypeDefinition(i); if (typeHandles.Contains(handle)) { continue; } ProcessType(handle); } }