예제 #1
0
        /// <summary>
        /// Gets an assembly reflector for a file.
        /// </summary>
        /// <returns>
        /// The reflector for the file.
        /// </returns>
        /// <param name='locator'>
        /// An assembly locator
        /// </param>
        /// <param name='path'>
        /// A file path
        /// </param>
        public virtual IAssemblyReflector GetReflectorForFile(IAssemblyLocator locator, string path)
        {
            if (reflector != null)
            {
                return(reflector);
            }

            // If there is a local copy of the cecil reflector, use it instead of the one in the gac
            Type   t;
            string asmFile = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "Mono.Addins.CecilReflector.dll");

            if (File.Exists(asmFile))
            {
                Assembly asm = Assembly.LoadFrom(asmFile);
                t = asm.GetType("Mono.Addins.CecilReflector.Reflector");
            }
            else
            {
                string refName = GetType().Assembly.FullName;
                int    i       = refName.IndexOf(',');
                refName = "Mono.Addins.CecilReflector.Reflector, Mono.Addins.CecilReflector" + refName.Substring(i);
                t       = Type.GetType(refName, false);
            }
            if (t != null)
            {
                reflector = (IAssemblyReflector)Activator.CreateInstance(t);
            }
            else
            {
                reflector = new DefaultAssemblyReflector();
            }

            reflector.Initialize(locator);
            return(reflector);
        }
예제 #2
0
        public AddinScanner(AddinDatabase database, AddinScanResult scanResult, IProgressStatus monitor)
        {
            this.database = database;
            if (!scanResult.CheckOnly)
            {
                string refName = GetType().Assembly.FullName;
                int    i       = refName.IndexOf(',');
                refName = "Mono.Addins.CecilReflector.Reflector, Mono.Addins.CecilReflector" + refName.Substring(i);
                Type t = Type.GetType(refName, false);
                if (t != null)
                {
                    reflector = (IAssemblyReflector)Activator.CreateInstance(t);
                }
                else
                {
                    reflector = new DefaultAssemblyReflector();
                }

                if (monitor.LogLevel > 1)
                {
                    monitor.Log("Using assembly reflector: " + reflector.GetType());
                }
                reflector.Initialize(scanResult);
                coreAssembly = reflector.LoadAssembly(GetType().Assembly.Location);
            }
        }