Browse Source

Fix #1706: Handle unloaded projects correctly to avoid NotImplementedException

pull/1725/head
Andreas Weizel 6 years ago
parent
commit
ef477c5c28
  1. 35
      ILSpy.AddIn/Commands/OpenILSpyCommand.cs

35
ILSpy.AddIn/Commands/OpenILSpyCommand.cs

@ -77,10 +77,10 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
string assemblyName = assemblyDef.Name.Name; string assemblyName = assemblyDef.Name.Name;
if (AssemblyFileFinder.IsReferenceAssembly(assemblyDef, reference.Display)) { if (AssemblyFileFinder.IsReferenceAssembly(assemblyDef, reference.Display)) {
string resolvedAssemblyFile = AssemblyFileFinder.FindAssemblyFile(assemblyDef, reference.Display); string resolvedAssemblyFile = AssemblyFileFinder.FindAssemblyFile(assemblyDef, reference.Display);
dict.Add(assemblyName, dict.Add(assemblyName,
new DetectedReference(assemblyName, resolvedAssemblyFile, false)); new DetectedReference(assemblyName, resolvedAssemblyFile, false));
} else { } else {
dict.Add(assemblyName, dict.Add(assemblyName,
new DetectedReference(assemblyName, reference.Display, false)); new DetectedReference(assemblyName, reference.Display, false));
} }
} }
@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
var roslynProject = owner.Workspace.CurrentSolution.GetProject(projectReference.ProjectId); var roslynProject = owner.Workspace.CurrentSolution.GetProject(projectReference.ProjectId);
var project = FindProject(owner.DTE.Solution.Projects.OfType<EnvDTE.Project>(), roslynProject.FilePath); var project = FindProject(owner.DTE.Solution.Projects.OfType<EnvDTE.Project>(), roslynProject.FilePath);
if (roslynProject != null && project != null) if (roslynProject != null && project != null)
dict.Add(roslynProject.AssemblyName, dict.Add(roslynProject.AssemblyName,
new DetectedReference(roslynProject.AssemblyName, Utils.GetProjectOutputAssembly(project, roslynProject), true)); new DetectedReference(roslynProject.AssemblyName, Utils.GetProjectOutputAssembly(project, roslynProject), true));
} }
return dict; return dict;
@ -98,16 +98,25 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
protected EnvDTE.Project FindProject(IEnumerable<EnvDTE.Project> projects, string projectFile) protected EnvDTE.Project FindProject(IEnumerable<EnvDTE.Project> projects, string projectFile)
{ {
foreach (var project in projects) { foreach (var project in projects) {
if (project.Kind == DTEConstants.vsProjectKindSolutionItems) { switch (project.Kind) {
// This is a solution folder -> search in sub-projects case DTEConstants.vsProjectKindSolutionItems:
var subProject = FindProject( // This is a solution folder -> search in sub-projects
project.ProjectItems.OfType<EnvDTE.ProjectItem>().Select(pi => pi.SubProject).OfType<EnvDTE.Project>(), var subProject = FindProject(
projectFile); project.ProjectItems.OfType<EnvDTE.ProjectItem>().Select(pi => pi.SubProject).OfType<EnvDTE.Project>(),
if (subProject != null) projectFile);
return subProject; if (subProject != null)
} else { return subProject;
if (project.FileName == projectFile) break;
return project;
case DTEConstants.vsProjectKindUnmodeled:
// Skip unloaded projects completely
break;
default:
// Match by project's file name
if (project.FileName == projectFile)
return project;
break;
} }
} }

Loading…
Cancel
Save