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);
        }
Exemple #2
0
        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;
 }
Exemple #4
0
 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);
     });
 }
Exemple #5
0
 public void BreakOnLoadAssembly(string assemblyName, Action <IDebuggerAssembly> action, AssemblyNameComparerFlags flags) =>
 BreakOnLoadAssembly(new AssemblyNameInfo(assemblyName), action, flags);
Exemple #6
0
		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;
			});
		}
Exemple #7
0
		public void BreakOnLoadAssembly(string assemblyName, Action<IDebuggerAssembly> action, AssemblyNameComparerFlags flags) =>
			BreakOnLoadAssembly(new AssemblyNameInfo(assemblyName), action, flags);