/// <summary> /// Load assembly from disk /// </summary> /// <param name="location">assembly location</param> /// <param name="loadsymbols">load symbols</param> /// <returns></returns> public override AssemblyDefinition LoadAssembly(string location, bool loadsymbols) { ReaderParameters parameters = new ReaderParameters(); parameters.ReadSymbols = loadsymbols; parameters.ReadingMode = ReadingMode.Deferred; var resolver = new ReflexilAssemblyResolver(); try { return resolver.ReadAssembly(location, parameters); } catch(Exception) { // perhaps pdb file is not found, just ignore this time if (loadsymbols) { parameters.ReadSymbols = false; return resolver.ReadAssembly(location, parameters); } else throw; } }
public sealed override String[] GetReferences(bool keepextension) { var references = new List<string>(); var resolver = new ReflexilAssemblyResolver(); var filename = _mdefsource.DeclaringType.Module.Image.FileName; var currentPath = Path.GetDirectoryName(filename); if (currentPath != null) { Directory.SetCurrentDirectory(currentPath); resolver.AddSearchDirectory(currentPath); // Properly register assembly, so we can find it even if the name is changed resolver.RegisterAssembly(_mdefsource.DeclaringType.Module.Assembly); } foreach (var asmref in CompileReferences) { string reference; if (asmref.Name == "mscorlib" || asmref.Name.StartsWith("System")) { reference = asmref.Name + ((keepextension) ? ".dll": string.Empty); } else { try { var asmdef = resolver.Resolve(asmref); reference = asmdef.MainModule.Image.FileName; } catch (Exception) { continue; } } if (!references.Contains(reference)) references.Add(reference); } return references.ToArray(); }