TypeToAssemblyNamespaceMap LoadAssemblyMap(BinaryReader reader, ExtendedFrameworkVersion frameworkVersion) { TypeToAssemblyNamespaceMap result = new TypeToAssemblyNamespaceMap(); result._AssemblyPath = reader.ReadString(); result._AssemblySignature = FileSignature.Read(reader); int typeCount = reader.ReadInt32(); for (int typeIndex = 0; typeIndex < typeCount; typeIndex++) { string typeName = reader.ReadString(); int namespaceCount = reader.ReadInt32(); if (!result.ContainsKey(typeName)) result.Add(typeName, new AssemblyNamespaceList()); AssemblyNamespaceList assemblyNamespaces = result.GetNamespaceList(typeName); for (int i = 0; i < namespaceCount; i++) { int assemblyIndex = reader.ReadInt32(); int namespaceIndex = reader.ReadInt32(); assemblyNamespaces.Add(new AssemblyNamespace(frameworkVersion, assemblyIndex, namespaceIndex)); } } return result; }
TypeToAssemblyNamespaceMap CollectTypes(string assemblyPath, ExtendedFrameworkVersion frameworkVersion) { assemblyPath = assemblyPath.ToLowerInvariant(); TypeToAssemblyNamespaceMap result = new TypeToAssemblyNamespaceMap(); result._AssemblyPath = assemblyPath; result._AssemblySignature = new FileSignature(assemblyPath); AssemblyTypeLoadResult typeLoadResult = LoadTypesFromAssembly(assemblyPath); if (typeLoadResult == null) return result; foreach (ITypeInfo typeInfo in typeLoadResult.Types) { if (!result.ContainsKey(typeInfo.NestedName)) result.Add(typeInfo.NestedName, new AssemblyNamespaceList()); AssemblyNamespaceList list = result.GetNamespaceList(typeInfo.NestedName); list.AddUnique(new AssemblyNamespace(typeLoadResult.AssemblyInfo.FullName, typeInfo.Namespace, frameworkVersion)); } return result; }