From c4bafdde2e58ae0fdbc3db6c896f4a2f870884f9 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 20 Dec 2017 20:51:12 +0100 Subject: [PATCH] Fix assembly reference logging bug: References found in the assembly list should not be marked unresolved. --- .../DotNetCore/DotNetCorePathFinderExtensions.cs | 15 +++++++++++++++ ILSpy/LoadedAssembly.cs | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.Decompiler/DotNetCore/DotNetCorePathFinderExtensions.cs b/ICSharpCode.Decompiler/DotNetCore/DotNetCorePathFinderExtensions.cs index 5ab6e3139..7fb8f2561 100644 --- a/ICSharpCode.Decompiler/DotNetCore/DotNetCorePathFinderExtensions.cs +++ b/ICSharpCode.Decompiler/DotNetCore/DotNetCorePathFinderExtensions.cs @@ -43,6 +43,21 @@ namespace ICSharpCode.Decompiler } } + public void AddMessageOnce(string fullName, MessageKind kind, string message) + { + lock (loadedAssemblyReferences) { + if (!loadedAssemblyReferences.TryGetValue(fullName, out var referenceInfo)) { + referenceInfo = new UnresolvedAssemblyNameReference(fullName); + loadedAssemblyReferences.Add(fullName, referenceInfo); + referenceInfo.Messages.Add((kind, message)); + } else { + var lastMsg = referenceInfo.Messages.LastOrDefault(); + if (kind != lastMsg.Item1 && message != lastMsg.Item2) + referenceInfo.Messages.Add((kind, message)); + } + } + } + public bool TryGetInfo(string fullName, out UnresolvedAssemblyNameReference info) { lock (loadedAssemblyReferences) { diff --git a/ILSpy/LoadedAssembly.cs b/ILSpy/LoadedAssembly.cs index 483136b3b..6ec5c113a 100644 --- a/ILSpy/LoadedAssembly.cs +++ b/ILSpy/LoadedAssembly.cs @@ -267,6 +267,7 @@ namespace ICSharpCode.ILSpy foreach (LoadedAssembly loaded in assemblyList.GetAssemblies()) { var asmDef = loaded.GetAssemblyDefinitionOrNull(); if (asmDef != null && data.fullName.Equals(data.isWinRT ? asmDef.Name.Name : asmDef.FullName, StringComparison.OrdinalIgnoreCase)) { + LoadedAssemblyReferencesInfo.AddMessageOnce(data.fullName, MessageKind.Info, "Success - Found in Assembly List"); return loaded; } } @@ -295,7 +296,7 @@ namespace ICSharpCode.ILSpy LoadedAssemblyReferencesInfo.AddMessage(data.fullName, MessageKind.Info, "Success - Loading from: " + file); asm = new LoadedAssembly(assemblyList, file) { IsAutoLoaded = true }; } else { - LoadedAssemblyReferencesInfo.AddMessage(data.fullName, MessageKind.Error, "Could not find reference: " + data.fullName); + LoadedAssemblyReferencesInfo.AddMessageOnce(data.fullName, MessageKind.Error, "Could not find reference: " + data.fullName); return null; } loadingAssemblies.Add(file, asm);