From 1d11d0efa4f3ab342f97cd3bdf90b1af4b7a67de Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Wed, 25 Sep 2019 21:41:44 +0200 Subject: [PATCH] Fix #1706: Handle unloaded projects correctly to avoid NotImplementedException --- ILSpy.AddIn/Commands/OpenILSpyCommand.cs | 35 +++++++++++++++--------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/ILSpy.AddIn/Commands/OpenILSpyCommand.cs b/ILSpy.AddIn/Commands/OpenILSpyCommand.cs index 898393005..35a2cc29f 100644 --- a/ILSpy.AddIn/Commands/OpenILSpyCommand.cs +++ b/ILSpy.AddIn/Commands/OpenILSpyCommand.cs @@ -77,10 +77,10 @@ namespace ICSharpCode.ILSpy.AddIn.Commands string assemblyName = assemblyDef.Name.Name; if (AssemblyFileFinder.IsReferenceAssembly(assemblyDef, reference.Display)) { string resolvedAssemblyFile = AssemblyFileFinder.FindAssemblyFile(assemblyDef, reference.Display); - dict.Add(assemblyName, + dict.Add(assemblyName, new DetectedReference(assemblyName, resolvedAssemblyFile, false)); } else { - dict.Add(assemblyName, + dict.Add(assemblyName, new DetectedReference(assemblyName, reference.Display, false)); } } @@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.AddIn.Commands var roslynProject = owner.Workspace.CurrentSolution.GetProject(projectReference.ProjectId); var project = FindProject(owner.DTE.Solution.Projects.OfType(), roslynProject.FilePath); if (roslynProject != null && project != null) - dict.Add(roslynProject.AssemblyName, + dict.Add(roslynProject.AssemblyName, new DetectedReference(roslynProject.AssemblyName, Utils.GetProjectOutputAssembly(project, roslynProject), true)); } return dict; @@ -98,16 +98,25 @@ namespace ICSharpCode.ILSpy.AddIn.Commands protected EnvDTE.Project FindProject(IEnumerable projects, string projectFile) { foreach (var project in projects) { - if (project.Kind == DTEConstants.vsProjectKindSolutionItems) { - // This is a solution folder -> search in sub-projects - var subProject = FindProject( - project.ProjectItems.OfType().Select(pi => pi.SubProject).OfType(), - projectFile); - if (subProject != null) - return subProject; - } else { - if (project.FileName == projectFile) - return project; + switch (project.Kind) { + case DTEConstants.vsProjectKindSolutionItems: + // This is a solution folder -> search in sub-projects + var subProject = FindProject( + project.ProjectItems.OfType().Select(pi => pi.SubProject).OfType(), + projectFile); + if (subProject != null) + return subProject; + break; + + case DTEConstants.vsProjectKindUnmodeled: + // Skip unloaded projects completely + break; + + default: + // Match by project's file name + if (project.FileName == projectFile) + return project; + break; } }