Browse Source

Fix ScopedWhereUsedAnalyzer.GetReferencingAssemblies: When looking for referenced assemblies use built-in assembly resolver. This makes the analyzer use the same assembly references as the decompiler, which leads to better analysis results, or even any results when dealing with an assembly for which the framework is not installed. (Might be related to #1070 as well)

pull/1143/head
Siegfried Pammer 8 years ago
parent
commit
6a1e865fba
  1. 7
      ILSpy/TreeNodes/Analyzer/ScopedWhereUsedAnalyzer.cs

7
ILSpy/TreeNodes/Analyzer/ScopedWhereUsedAnalyzer.cs

@ -250,10 +250,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -250,10 +250,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
private IEnumerable<AssemblyDefinition> GetReferencingAssemblies(AssemblyDefinition asm, CancellationToken ct)
{
using (LoadedAssembly.DisableAssemblyLoad()) {
yield return asm;
string requiredAssemblyFullName = asm.FullName;
IEnumerable<LoadedAssembly> assemblies = MainWindow.Instance.CurrentAssemblyList.GetAssemblies().Where(assy => assy.GetAssemblyDefinitionOrNull() != null);
foreach (var assembly in assemblies) {
@ -262,8 +261,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -262,8 +261,9 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
var module = assembly.GetModuleDefinitionOrNull();
if (module == null)
continue;
var resolver = assembly.GetAssemblyResolver();
foreach (var reference in module.AssemblyReferences) {
if (requiredAssemblyFullName == reference.FullName) {
if (resolver.Resolve(reference) == asm) {
found = true;
break;
}
@ -272,6 +272,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -272,6 +272,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
yield return module.Assembly;
}
}
}
private IEnumerable<AssemblyDefinition> GetAssemblyAndAnyFriends(AssemblyDefinition asm, CancellationToken ct)
{

Loading…
Cancel
Save