/// <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); }
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); } }