private Assembly LoadAssembly(PEReader pe, AssemblyName name = null) { MetadataReader reader = pe.GetMetadataReader(); if (!reader.IsAssembly) { throw new InvalidDataException("Specified assembly must be an assembly!"); } if (name != null && !AsmNameComparer.Equals(name, reader.GetAssemblyDefinition().GetAssemblyName())) { throw new ArgumentException("Resolved assembly doesn't match the embedded assembly name!"); } name = reader.GetAssemblyDefinition().GetAssemblyName(); if (_key_pairs.TryGetValue(new ByteData(name.GetPublicKey()), out StrongNameKeyPair kp)) { name.KeyPair = kp; } name.SetPublicKey(null); AssemblyTracker tracker = new AssemblyTracker(name); BuildReferences(reader, tracker); return(null); }
private void BuildReferences(MetadataReader reader, AssemblyTracker tracker) { foreach (AssemblyReferenceHandle _handle in reader.AssemblyReferences) { AssemblyName reference = reader.GetAssemblyReference(_handle).GetAssemblyName(); if (_loaded.TryGetValue(reference, out Assembly asm)) { tracker.AddRef(asm); } else { tracker.AddRef(LoadAssembly(reference)); } } }
public ModuleTracker(AssemblyTracker tracker, ModuleBuilder moduleBuilder) { Assembly = tracker; _mod = moduleBuilder; }