public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { PEMemoryBlock resourceDirectory = _module.PEReader.GetSectionData(_module.PEReader.PEHeaders.CorHeader.ResourcesDirectory.RelativeVirtualAddress); foreach (var resourceHandle in _module.MetadataReader.ManifestResources) { ManifestResource resource = _module.MetadataReader.GetManifestResource(resourceHandle); // Don't try to process linked resources or resources in other assemblies if (!resource.Implementation.IsNil) { continue; } string resourceName = _module.MetadataReader.GetString(resource.Name); if (resourceName == "ILLink.Descriptors.xml") { BlobReader reader = resourceDirectory.GetReader((int)resource.Offset, resourceDirectory.Length - (int)resource.Offset); int length = (int)reader.ReadUInt32(); UnmanagedMemoryStream ms; unsafe { ms = new UnmanagedMemoryStream(reader.CurrentPointer, length); } var metadataManager = (UsageBasedMetadataManager)factory.MetadataManager; return(DescriptorMarker.GetDependencies(factory, ms, resource, _module, "resource " + resourceName + " in " + _module.ToString(), metadataManager.FeatureSwitches)); } } return(Array.Empty <DependencyListEntry>()); }
public static void ProcessDescriptors(AssemblyDefinition assembly, LinkContext context) { if (context.Annotations.GetAction(assembly) == AssemblyAction.Skip) { return; } var rsc = GetEmbeddedXml(assembly, res => ShouldProcessRootDescriptorResource(assembly, context, res.Name)); if (rsc == null) { return; } DescriptorMarker marker = null; try { context.LogMessage($"Processing embedded linker descriptor {rsc.Name} from {assembly.Name}"); marker = GetExternalResolveStep(context, rsc, assembly); } catch (XmlException ex) { /* This could happen if some broken XML file is embedded. */ context.LogError($"Error processing {rsc.Name}: {ex}", 1003); } if (marker != null) { marker.Mark(); } }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { using (Stream fs = File.OpenRead(_fileName)) { var metadataManager = (UsageBasedMetadataManager)factory.MetadataManager; return(DescriptorMarker.GetDependencies(factory, fs, default, default, _fileName, metadataManager.FeatureSwitches));