public AssemblyRecord Analyze(Assembly assembly) { var record = new AssemblyRecord(); record.AssemblyName = assembly.GetName(); record.Name = record.AssemblyName.Name; var version = record.AssemblyName.Version; record.Version = string.Format("{0}.{1}.{2}.{3}", version.Major.ToString().PadLeft(2), version.Minor.ToString().PadLeft(2), version.MajorRevision.ToString().PadLeft(2), version.MinorRevision.ToString().PadLeft(2)); record.References = new List<AssemblyRecord>(); foreach (var reference in assembly.GetReferencedAssemblies()) { try { var referenceAssembly = Assembly.ReflectionOnlyLoad(reference.FullName); if (!referenceAssembly.GlobalAssemblyCache) { if (!_localCache.ContainsKey(referenceAssembly.FullName)) { var referenceRecord = Analyze(referenceAssembly); _localCache.Add(referenceAssembly.FullName, referenceRecord); } record.References.Add(_localCache[referenceAssembly.FullName]); } } catch { } } record.References.Sort((a1, a2) => a1.Name.CompareTo(a2.Name)); return record; }
protected virtual void DisplayAssembly(AssemblyRecord record) { if (_records.Add(record)) { Console.WriteLine(string.Format("Assembly: {0}", record.Name)); Console.WriteLine("References:"); foreach (var reference in record.References) { string line = string.Format("{0}{1}", reference.Version.PadRight(15), reference.Name); Console.WriteLine(line.PadLeft(line.Length + PAD_SIZE)); } foreach (var reference in record.References) { DisplayAssembly(reference); } } }