From a99ad628915350390caf66db51d6657f1b4eedb1 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 15 Nov 2013 23:52:07 +0100 Subject: [PATCH] fix possible problem with dynamic assemblies in ClassBrowser --- src/AddIns/Debugger/Debugger.Core/Module.cs | 5 ++++- .../Debugger/Debugger.Core/TypeSystemExtensions.cs | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.Core/Module.cs b/src/AddIns/Debugger/Debugger.Core/Module.cs index c00bd21b75..baa2af2713 100644 --- a/src/AddIns/Debugger/Debugger.Core/Module.cs +++ b/src/AddIns/Debugger/Debugger.Core/Module.cs @@ -71,7 +71,10 @@ namespace Debugger if (symReader != null) return symReader.GetUserEntryPoint(); var info = TypeSystemExtensions.GetInfo(Assembly); - var ep = info.CecilModule.EntryPoint; + var cecilModule = info.CecilModule; + if (cecilModule == null) + return 0; + var ep = cecilModule.EntryPoint; if (ep != null) return ep.MetadataToken.ToUInt32(); return 0; diff --git a/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs b/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs index 6c7616f871..502d8964fc 100644 --- a/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs +++ b/src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs @@ -138,8 +138,11 @@ namespace Debugger internal static Task LoadModuleAsync(Module module, ICorDebugModule corModule) { string name = corModule.GetName(); - if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) - return Task.FromResult(new DefaultUnresolvedAssembly(name)); + if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) { + var defaultUnresolvedAssembly = new DefaultUnresolvedAssembly(name); + weakTable.Add(defaultUnresolvedAssembly, new ModuleMetadataInfo(module, null)); + return Task.FromResult(defaultUnresolvedAssembly); + } //return Task.FromResult(LoadModule(module, name)); return Task.Run(() => LoadModule(module, name)); @@ -181,6 +184,8 @@ namespace Debugger ModuleMetadataInfo info; if (!weakTable.TryGetValue(module.UnresolvedAssembly, out info)) throw new ArgumentException("The assembly was not from the debugger type system"); + if (info.CecilModule == null) + return EmptyList.Instance; return info.CecilModule.AssemblyReferences.Select(r => r.FullName); }