private static IEnumerable <(string, byte[])> ComputeContents( string rootAssemblyName, ReferencedAssemblyResolver resolver) { var foundAssemblies = new Dictionary <string, ReferencedAssemblyInfo>(); AddWithReferencesRecursive(rootAssemblyName, resolver, foundAssemblies); return(foundAssemblies.Values.Select(assembly => ( $"/{assembly.Definition.Name.Name}.dll", assembly.Data))); }
private static void AddWithReferencesRecursive( string name, ReferencedAssemblyResolver resolver, IDictionary <string, ReferencedAssemblyInfo> results) { if (resolver.TryResolve(name, out var assemblyBytes)) { var assemblyInfo = new ReferencedAssemblyInfo(assemblyBytes); results.Add(assemblyInfo.Definition.Name.Name, assemblyInfo); var childReferencesToAdd = assemblyInfo.Definition.Modules .SelectMany(module => module.AssemblyReferences) .Select(childReference => childReference.Name) .Where(childReferenceName => !results.ContainsKey(childReferenceName)); foreach (var childReferenceName in childReferencesToAdd) { AddWithReferencesRecursive(childReferenceName, resolver, results); } } }
public ReferencedAssemblyFileProvider(string rootAssemblyName, ReferencedAssemblyResolver resolver) : base(ComputeContents(rootAssemblyName, resolver)) { }