using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace AssemblyRef
{
class Program
{
static void Main(string[] args)
{
Assembly[] seeds = args.Select(i => Assembly.ReflectionOnlyLoadFrom(i)).ToArray();
List<string> seen = new List<string>();
foreach (string name in GetReferencedAssemblies(seeds, seen))
{
Console.WriteLine(name);
}
}
static IEnumerable<string> GetReferencedAssemblies(IEnumerable<Assembly> assemblies, List<string> seen)
{
List<Assembly> found = new List<Assembly>();
foreach (Assembly i in assemblies)
{
if (!seen.Contains(i.FullName))
{
seen.Add(i.FullName);
yield return i.FullName;
foreach (AssemblyName name in i.GetReferencedAssemblies())
found.Add(Assembly.ReflectionOnlyLoad(name.FullName));
}
}
if (found.Count > 0)
foreach (string name in GetReferencedAssemblies(found, seen))
yield return name;
}
}
}