public ApiTraverser(IMetadataReaderHost host, IAssembly assembly) { if (host == null) throw new ArgumentNullException("ContractAwareHost arg should not be null."); _host = host; _assembly = new AssemblyApi(assembly); }
public static IEnumerable<string> CompareApi(AssemblyApi oldVersion, AssemblyApi newVersion) { List<string> incompatibility = new List<string>(); if (newVersion.IsCompatible(oldVersion) >= 0) return null; else return incompatibility; }
static int Main(string[] args) { #if DEBUG args = new string[2]; args[0] = "-a"; args[1] = @"Y:\Career\Ctrip2014\Project\ApiScannerTemp\DummyAssembly1\Arch.CFX.dll"; //args[2] = "-n"; //args[3] = @"Y:\Career\Ctrip2014\Project\ApiScannerTemp\DummyAssembly2\Arch.CFX.dll"; #endif if (!TryReadArgs(args)) { WriteHelp(); #if !DEBUG return(0); #endif } int result = 0; AssemblyApi assembly = Scanner.Traverse(_path); if (!string.IsNullOrWhiteSpace(_newVersion)) { AssemblyApi newAssembly = Scanner.Traverse(_newVersion); var incoms = Scanner.CompareApi(assembly, newAssembly); if (incoms != null) { Console.WriteLine("Incompatible API as follows:"); foreach (string incom in incoms) { Console.WriteLine(incom); } result = -1; } else { Console.WriteLine("Assemblies are compatible."); } } else { PrintApi(assembly); } #if DEBUG Console.ReadLine(); #endif return(result); }
static void PrintApi(AssemblyApi assembly) { Console.WriteLine(assembly.ToString()); Console.WriteLine("References:"); foreach (var refe in assembly.References) Console.WriteLine("\t{0}", refe.ToString()); foreach (var type in assembly.Types) { Console.WriteLine(type.Signature); Console.WriteLine("\tBase Classes:"); foreach (var parent in type.Parents) Console.WriteLine("\t\t{0}", parent); foreach (var api in type.Members) Console.WriteLine("\t{0}", api.Signature); } }
static void PrintApi(AssemblyApi assembly) { Console.WriteLine(assembly.ToString()); Console.WriteLine("References:"); foreach (var refe in assembly.References) { Console.WriteLine("\t{0}", refe.ToString()); } foreach (var type in assembly.Types) { Console.WriteLine(type.Signature); Console.WriteLine("\tBase Classes:"); foreach (var parent in type.Parents) { Console.WriteLine("\t\t{0}", parent); } foreach (var api in type.Members) { Console.WriteLine("\t{0}", api.Signature); } } }