diff --git a/ILSpy/LoadedAssembly.cs b/ILSpy/LoadedAssembly.cs index c9f145b7d..2a95e3db4 100644 --- a/ILSpy/LoadedAssembly.cs +++ b/ILSpy/LoadedAssembly.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; @@ -41,6 +42,7 @@ namespace ICSharpCode.ILSpy /// /// Represents an assembly loaded into ILSpy. /// + [DebuggerDisplay("LoadedAssembly({shortName})")] public sealed class LoadedAssembly { internal static readonly ConditionalWeakTable loadedAssemblies = new ConditionalWeakTable(); diff --git a/ILSpy/MainWindow.xaml.cs b/ILSpy/MainWindow.xaml.cs index 8e6e8b6b1..38897a59f 100644 --- a/ILSpy/MainWindow.xaml.cs +++ b/ILSpy/MainWindow.xaml.cs @@ -284,23 +284,24 @@ namespace ICSharpCode.ILSpy LoadAssemblies(nugetPackagesToLoad, commandLineLoadedAssemblies, focusNode: false); nugetPackagesToLoad.Clear(); } - NavigateOnLaunch(args.NavigateTo, sessionSettings.ActiveTreeViewPath, spySettings); + var relevantAssemblies = commandLineLoadedAssemblies.ToList(); + commandLineLoadedAssemblies.Clear(); // clear references once we don't need them anymore + NavigateOnLaunch(args.NavigateTo, sessionSettings.ActiveTreeViewPath, spySettings, relevantAssemblies); if (args.Search != null) { SearchPane.Instance.SearchTerm = args.Search; SearchPane.Instance.Show(); } - commandLineLoadedAssemblies.Clear(); // clear references once we don't need them anymore } - async void NavigateOnLaunch(string navigateTo, string[] activeTreeViewPath, ILSpySettings spySettings) + async void NavigateOnLaunch(string navigateTo, string[] activeTreeViewPath, ILSpySettings spySettings, List relevantAssemblies) { var initialSelection = treeView.SelectedItem; if (navigateTo != null) { bool found = false; if (navigateTo.StartsWith("N:", StringComparison.Ordinal)) { string namespaceName = navigateTo.Substring(2); - foreach (LoadedAssembly asm in commandLineLoadedAssemblies) { + foreach (LoadedAssembly asm in relevantAssemblies) { AssemblyTreeNode asmNode = assemblyListTreeNode.FindAssemblyNode(asm); if (asmNode != null) { // FindNamespaceNode() blocks the UI if the assembly is not yet loaded, @@ -317,7 +318,7 @@ namespace ICSharpCode.ILSpy } } } else { - IEntity mr = await Task.Run(() => FindEntityInCommandLineLoadedAssemblies(navigateTo)); + IEntity mr = await Task.Run(() => FindEntityInRelevantAssemblies(navigateTo, relevantAssemblies)); if (mr != null && mr.ParentModule.PEFile != null) { found = true; if (treeView.SelectedItem == initialSelection) { @@ -362,7 +363,7 @@ namespace ICSharpCode.ILSpy } } - private IEntity FindEntityInCommandLineLoadedAssemblies(string navigateTo) + private IEntity FindEntityInRelevantAssemblies(string navigateTo, IEnumerable relevantAssemblies) { ITypeReference typeRef = null; IMemberReference memberRef = null; @@ -372,7 +373,7 @@ namespace ICSharpCode.ILSpy memberRef = IdStringProvider.ParseMemberIdString(navigateTo); typeRef = memberRef.DeclaringTypeReference; } - foreach (LoadedAssembly asm in commandLineLoadedAssemblies) { + foreach (LoadedAssembly asm in relevantAssemblies.ToList()) { var module = asm.GetPEFileOrNull(); if (CanResolveTypeInPEFile(module, typeRef, out var typeHandle)) { ICompilation compilation = typeHandle.Kind == HandleKind.ExportedType