static AssemblyNameComparerFlags ToAssemblyNameComparerFlags(FindAssemblyOptions options) { AssemblyNameComparerFlags flags = 0; if ((options & FindAssemblyOptions.Name) != 0) { flags |= AssemblyNameComparerFlags.Name; } if ((options & FindAssemblyOptions.Version) != 0) { flags |= AssemblyNameComparerFlags.Version; } if ((options & FindAssemblyOptions.PublicKeyToken) != 0) { flags |= AssemblyNameComparerFlags.PublicKeyToken; } if ((options & FindAssemblyOptions.Culture) != 0) { flags |= AssemblyNameComparerFlags.Culture; } if ((options & FindAssemblyOptions.ContentType) != 0) { flags |= AssemblyNameComparerFlags.ContentType; } return(flags); }
public IDsDocument FindAssembly(IAssembly assembly) { const AssemblyNameComparerFlags flags = AssemblyNameComparerFlags.All & ~AssemblyNameComparerFlags.Version; var comparer = new AssemblyNameComparer(flags); rwLock.EnterReadLock(); try { foreach (var info in documents) { if (comparer.Equals(info.Document.AssemblyDef, assembly)) { return(info.Document); } } foreach (var info in documents) { if (info.IsAlternativeAssemblyName(assembly)) { return(info.Document); } } } finally { rwLock.ExitReadLock(); } lock (tempCache) { foreach (var document in tempCache) { if (comparer.Equals(document.AssemblyDef, assembly)) { return(document); } } } return(null); }
/// <summary> /// Constructor /// </summary> /// <param name="flags">Comparison flags</param> public AssemblyNameComparer(AssemblyNameComparerFlags flags) { this.flags = flags; }
public void BreakOnLoadAssembly(IAssembly assembly, Action <IDebuggerAssembly> action, AssemblyNameComparerFlags flags) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } assembly = assembly.ToAssemblyRef(); // Prevent storing AssemblyDef refs // Use the LoadModule event since without a module, we won't know the full assembly name CreateBreakpoint(DebugEventKind.LoadModule, (bp, ctx) => { var c = (ModuleEventContext)ctx; var comparer = new AssemblyNameComparer(flags); var asm = c.Module.Assembly; if (!comparer.Equals(assembly, new AssemblyNameInfo(asm.FullName))) { return(false); } bp.Remove(); action?.Invoke(asm); return(true); }); }
public void BreakOnLoadAssembly(string assemblyName, Action <IDebuggerAssembly> action, AssemblyNameComparerFlags flags) => BreakOnLoadAssembly(new AssemblyNameInfo(assemblyName), action, flags);
public void BreakOnLoadAssembly(IAssembly assembly, Action<IDebuggerAssembly> action, AssemblyNameComparerFlags flags) { if (assembly == null) throw new ArgumentNullException(nameof(assembly)); assembly = assembly.ToAssemblyRef();// Prevent storing AssemblyDef refs // Use the LoadModule event since without a module, we won't know the full assembly name CreateBreakpoint(DebugEventKind.LoadModule, (bp, ctx) => { var c = (ModuleEventContext)ctx; var comparer = new AssemblyNameComparer(flags); var asm = c.Module.Assembly; if (!comparer.Equals(assembly, new AssemblyNameInfo(asm.FullName))) return false; bp.Remove(); action?.Invoke(asm); return true; }); }
public void BreakOnLoadAssembly(string assemblyName, Action<IDebuggerAssembly> action, AssemblyNameComparerFlags flags) => BreakOnLoadAssembly(new AssemblyNameInfo(assemblyName), action, flags);