|
|
@ -135,7 +135,7 @@ namespace ICSharpCode.ILSpy |
|
|
|
disposed = true; |
|
|
|
disposed = true; |
|
|
|
assemblyLoadDisableCount--; |
|
|
|
assemblyLoadDisableCount--; |
|
|
|
// clear the lookup cache since we might have stored the lookups failed due to DisableAssemblyLoad()
|
|
|
|
// clear the lookup cache since we might have stored the lookups failed due to DisableAssemblyLoad()
|
|
|
|
MainWindow.Instance.CurrentAssemblyList.assemblyLookupCache.Clear(); |
|
|
|
MainWindow.Instance.CurrentAssemblyList.ClearCache(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -151,13 +151,13 @@ namespace ICSharpCode.ILSpy |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name) |
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var node = parent.LookupReferencedAssembly(name.FullName); |
|
|
|
var node = parent.LookupReferencedAssembly(name); |
|
|
|
return node != null ? node.AssemblyDefinition : null; |
|
|
|
return node != null ? node.AssemblyDefinition : null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) |
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var node = parent.LookupReferencedAssembly(name.FullName); |
|
|
|
var node = parent.LookupReferencedAssembly(name); |
|
|
|
return node != null ? node.AssemblyDefinition : null; |
|
|
|
return node != null ? node.AssemblyDefinition : null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -179,6 +179,17 @@ namespace ICSharpCode.ILSpy |
|
|
|
return new MyAssemblyResolver(this); |
|
|
|
return new MyAssemblyResolver(this); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public LoadedAssembly LookupReferencedAssembly(AssemblyNameReference name) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (name == null) |
|
|
|
|
|
|
|
throw new ArgumentNullException("name"); |
|
|
|
|
|
|
|
if ((name.Attributes & (AssemblyAttributes)0x0200) != 0) { |
|
|
|
|
|
|
|
return assemblyList.winRTMetadataLookupCache.GetOrAdd(name.Name, LookupWinRTMetadata); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return assemblyList.assemblyLookupCache.GetOrAdd(name.FullName, LookupReferencedAssemblyInternal); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public LoadedAssembly LookupReferencedAssembly(string fullName) |
|
|
|
public LoadedAssembly LookupReferencedAssembly(string fullName) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return assemblyList.assemblyLookupCache.GetOrAdd(fullName, LookupReferencedAssemblyInternal); |
|
|
|
return assemblyList.assemblyLookupCache.GetOrAdd(fullName, LookupReferencedAssemblyInternal); |
|
|
@ -214,6 +225,27 @@ namespace ICSharpCode.ILSpy |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LoadedAssembly LookupWinRTMetadata(string name) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach (LoadedAssembly asm in assemblyList.GetAssemblies()) { |
|
|
|
|
|
|
|
if (asm.AssemblyDefinition != null && name.Equals(asm.AssemblyDefinition.Name.Name, StringComparison.OrdinalIgnoreCase)) |
|
|
|
|
|
|
|
return asm; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (assemblyLoadDisableCount > 0) |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
if (!App.Current.Dispatcher.CheckAccess()) { |
|
|
|
|
|
|
|
// Call this method on the GUI thread.
|
|
|
|
|
|
|
|
return (LoadedAssembly)App.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Func<string, LoadedAssembly>(LookupWinRTMetadata), name); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string file = Path.Combine(Environment.SystemDirectory, "WinMetadata", name + ".winmd"); |
|
|
|
|
|
|
|
if (File.Exists(file)) { |
|
|
|
|
|
|
|
return assemblyList.OpenAssembly(file); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Task ContinueWhenLoaded(Action<Task<AssemblyDefinition>> onAssemblyLoaded, TaskScheduler taskScheduler) |
|
|
|
public Task ContinueWhenLoaded(Action<Task<AssemblyDefinition>> onAssemblyLoaded, TaskScheduler taskScheduler) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return this.assemblyTask.ContinueWith(onAssemblyLoaded, taskScheduler); |
|
|
|
return this.assemblyTask.ContinueWith(onAssemblyLoaded, taskScheduler); |
|
|
|