예제 #1
0
 protected override void LoadChildren()
 {
     foreach (var r in module.GetAssemblyRefs().OrderBy(r => r.Name.String))
     {
         this.Children.Add(new AssemblyReferenceTreeNode(r, parentAssembly, dnSpyFileListTreeNode));
     }
     foreach (var r in module.GetModuleRefs().OrderBy(r => r.Name.String))
     {
         this.Children.Add(new ModuleReferenceTreeNode(r));
     }
 }
예제 #2
0
        public static bool ReferencesModule(ModuleDef sourceModule, ModuleDef targetModule)
        {
            if (targetModule == null)
            {
                return(false);
            }

            if (sourceModule == targetModule)
            {
                return(true);
            }

            var targetAssembly = targetModule.Assembly;

            if (targetAssembly != null)
            {
                // Don't compare version, there could be binding redirects
                var asmComparer = new AssemblyNameComparer(AssemblyNameComparerFlags.Name | AssemblyNameComparerFlags.PublicKeyToken | AssemblyNameComparerFlags.Culture | AssemblyNameComparerFlags.ContentType);
                foreach (var asmRef in sourceModule.GetAssemblyRefs())
                {
                    if (asmComparer.Equals(asmRef, targetAssembly))
                    {
                        return(true);
                    }
                }

                if (targetAssembly == sourceModule.Assembly)
                {
                    foreach (var modRef in sourceModule.GetModuleRefs())
                    {
                        if (StringComparer.OrdinalIgnoreCase.Equals(modRef.Name.String, targetModule.Name.String))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }