public static void AreSame(ReflectionItem expected, ReflectionItem actual) { switch (expected.ItemType) { case ReflectionItemType.Property: { ReflectionProperty expectedProperty = (ReflectionProperty)expected; ReflectionProperty actualProperty = (ReflectionProperty)actual; ReflectionAssert.AreSame(expectedProperty.UnderlyingGetMethod, actualProperty.UnderlyingGetMethod); ReflectionAssert.AreSame(expectedProperty.UnderlyingSetMethod, actualProperty.UnderlyingSetMethod); return; } case ReflectionItemType.Parameter: { ReflectionParameter expectedParameter = (ReflectionParameter)expected; ReflectionParameter actualParameter = (ReflectionParameter)actual; ReflectionAssert.AreSame(expectedParameter.UnderlyingParameter, actualParameter.UnderlyingParameter); return; } default: { ReflectionMember expectedMember = (ReflectionMember)expected; ReflectionMember actualMember = (ReflectionMember)actual; ReflectionAssert.AreSame(expectedMember.UnderlyingMember, actualMember.UnderlyingMember); return; } } }
static void Main(string[] args) { using (var stream = File.OpenRead(@"c:\users\jon\test\projects\nodatime\build\tmp\docfx\unstable\src\NodaTime\bin\Debug\net45\NodaTime.dll")) { var members = ReflectionMember.Load(stream).ToList(); var cecilUids = members.Select(m => m.DocfxUid).ToList(); var release = Release.Load(@"c:\users\jon\test\projects\nodatime\build\tmp\docfx\obj\unstable", "unstable"); var realUids = release.Members .Where(m => m.Type != DocfxMember.TypeKind.Namespace) .Where(m => !m.FullName.StartsWith("NodaTime.Testing")) .Where(m => !m.FullName.StartsWith("NodaTime.Serialization")) .Select(m => m.Uid) .ToList(); Console.WriteLine($"UIDs from Cecil: {cecilUids.Count}"); Console.WriteLine($"UIDs from Docfx: {realUids.Count}"); Console.WriteLine(); PrintUids("UIDs only in Cecil", cecilUids.Except(realUids)); Console.WriteLine(); PrintUids("UIDs only in Docfx", realUids.Except(cecilUids)); } }