Пример #1
0
        public AssemblyNameReference GetAssemblyNameReference(IAssemblyNameReference item)
        {
            var canr = JustDecompileHelper.ExtractCecilAssemblyNameReference(item);

            if (canr == null)
            {
                return(null);
            }

            return(TryGetOrAdd(_assemblynamereferencecache, canr,
                               anref => JustDecompileHelper.FindMatchingAssemblyReference(AssemblyDefinition, anref)));
        }
Пример #2
0
        public static object ExtractCecilAssemblyNameReference(IAssemblyNameReference anr)
        {
            var field =
                anr.GetType()
                .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                .FirstOrDefault(f => f.FieldType.FullName == typeof(AssemblyNameReference).FullName);

            if (field == null)
            {
                return(null);
            }

            return(field.GetValue(anr));
        }
Пример #3
0
        private IAssemblyContext SearchAssemblyReferenceContext(IAssemblyNameReference anr)
        {
            var canr = JustDecompileHelper.ExtractCecilAssemblyNameReference(anr);

            if (canr == null)
            {
                return(null);
            }

            foreach (var wrapper in Package.HostAssemblies)
            {
                var jdwrapper = (JustDecompileAssemblyWrapper)wrapper;
                foreach (var oanr in jdwrapper.AssemblyDefinition.MainModule.AssemblyReferences)
                {
                    var coanr = JustDecompileHelper.ExtractCecilAssemblyNameReference(oanr);
                    if (canr == coanr)
                    {
                        return(GetAssemblyContext(jdwrapper.Location));
                    }
                }
            }

            return(null);
        }