diff --git a/ILSpy/AssemblyTreeNode.cs b/ILSpy/AssemblyTreeNode.cs index b1ad4956f..a2d0dc8ad 100644 --- a/ILSpy/AssemblyTreeNode.cs +++ b/ILSpy/AssemblyTreeNode.cs @@ -33,6 +33,10 @@ namespace ICSharpCode.ILSpy this.LazyLoading = true; } + public string FileName { + get { return fileName; } + } + public override object Text { get { return name; } } diff --git a/ILSpy/MainWindow.xaml b/ILSpy/MainWindow.xaml index c1130e77c..e91f7ef90 100644 --- a/ILSpy/MainWindow.xaml +++ b/ILSpy/MainWindow.xaml @@ -9,6 +9,11 @@ UseLayoutRounding="True" TextOptions.TextFormattingMode="Display" > + + + diff --git a/ILSpy/MainWindow.xaml.cs b/ILSpy/MainWindow.xaml.cs index 66d2693d7..ec1d58f58 100644 --- a/ILSpy/MainWindow.xaml.cs +++ b/ILSpy/MainWindow.xaml.cs @@ -3,10 +3,13 @@ using System; using System.Diagnostics; +using System.IO; +using System.Linq; using System.Reflection; using System.Windows; - +using System.Windows.Input; using ICSharpCode.TreeView; +using Microsoft.Win32; namespace ICSharpCode.ILSpy { @@ -39,7 +42,34 @@ namespace ICSharpCode.ILSpy assemblies = treeView.Root.Children; foreach (Assembly asm in initialAssemblies) - assemblies.Add(new AssemblyTreeNode(asm.Location)); + OpenAssembly(asm.Location); + } + + void OpenCommandExecuted(object sender, ExecutedRoutedEventArgs e) + { + e.Handled = true; + OpenFileDialog dlg = new OpenFileDialog(); + dlg.Filter = ".NET assemblies|*.dll;*.exe|All files|*.*"; + dlg.Multiselect = true; + dlg.RestoreDirectory = true; + if (dlg.ShowDialog() == true) { + treeView.UnselectAll(); + foreach (string file in dlg.FileNames) { + treeView.SelectedItems.Add(OpenAssembly(file)); + } + } + } + + AssemblyTreeNode OpenAssembly(string file) + { + file = Path.GetFullPath(file); + + var node = assemblies.OfType().FirstOrDefault(a => file.Equals(a.FileName, StringComparison.OrdinalIgnoreCase)); + if (node == null) { + node = new AssemblyTreeNode(file); + assemblies.Add(node); + } + return node; } void ExitClick(object sender, RoutedEventArgs e)