private void BrowseAssembly(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog { Filter = "Assembly Files(*.exe, *.dll)|*.exe;*.dll" }; if (dialog.ShowDialog() == false) { Definition = null; DialogResult = false; return; } Definition = AssemblyDefinition.ReadAssembly(dialog.File.OpenRead()); if (Definition == null) { Debugger.Break(); } if (Definition.FullName == _reference.FullName) { string assemblyPath = Definition.IsSilverlight() ? StorageService.CacheSilverlightAssembly(dialog.File.Name, dialog.File.OpenRead()) : StorageService.CacheNetAssembly(dialog.File.Name, dialog.File.OpenRead()); var assemblyStream = new AssemblyFileStream(dialog.File); ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, Definition); DialogResult = true; } }
private void OnAssemblyDownloaded(Stream data) { RemoteCheckProgress.IsIndeterminate = false; if (data == null || data.Length == 0) { return; } var definition = AssemblyDefinition.ReadAssembly(data, new ReaderParameters(ReadingMode.Immediate)); if (definition == null || !definition.FullName.Equals(_reference.FullName, StringComparison.OrdinalIgnoreCase)) { RemoteCheckLabel.Text = "Failed to download assembly."; BrowseButton.IsEnabled = true; DownloadButton.IsEnabled = true; return; } string fileName = definition.Name.Name + ".dll"; // TODO: take into account partial trust in-browser mode string assemblyPath = Definition.IsSilverlight() ? StorageService.CacheSilverlightAssembly(fileName, data) : StorageService.CacheNetAssembly(fileName, data); var assemblyStream = new AssemblyMemoryStream(fileName, data); ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, definition); Definition = definition; DialogResult = true; }
private void OnLoadAssemblyClick(object sender, RoutedEventArgs e) { var dlg = new OpenFileDialog(); if (dlg.ShowDialog() == true) { Dispatcher.BeginInvoke(() => { try { var definition = AssemblyDefinition.ReadAssembly(dlg.File.OpenRead()); if (definition.IsSilverlight()) { StorageService.CacheSilverlightAssembly(dlg.File.Name, dlg.File.OpenRead()); } else { StorageService.CacheNetAssembly(dlg.File.Name, dlg.File.OpenRead()); } LoadOrReplaceAssembly(definition); } catch (Exception ex) { Debug.WriteLine(ex.Message); } }); } }
private void DownloadPendingAssemblies() { if (_pendingDownloads.Count == 0) { return; } _busyContext.IsBusy = true; ThreadPool.QueueUserWorkItem(o => { while (_pendingDownloads.Count > 0) { var fileInfo = _pendingDownloads.Dequeue(); Dispatcher.BeginInvoke(() => { _busyContext.ItemLabel = fileInfo.Name; }); try { string extension = Path.GetExtension(fileInfo.Name); if (KnownFormats.Zip.Contains(extension)) { StorageService.AddFileToCache(fileInfo); Dispatcher.BeginInvoke(() => LoadZiPackage(fileInfo)); } else { var definition = AssemblyDefinition.ReadAssembly(fileInfo.OpenRead()); string assemblyPath = definition.IsSilverlight() ? StorageService.CacheSilverlightAssembly(fileInfo.Name, fileInfo.OpenRead()) : StorageService.CacheNetAssembly(fileInfo.Name, fileInfo.OpenRead()); Dispatcher.BeginInvoke(() => { var assemblyStream = new AssemblyFileStream(fileInfo); ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, definition, false); LoadOrReplaceAssembly(definition, assemblyStream); }); } } catch (Exception ex) { Debug.WriteLine(ex.Message); Dispatcher.BeginInvoke(() => new ErrorWindow(ex).Show()); } } Dispatcher.BeginInvoke(() => _busyContext.IsBusy = false); }); }
private void DownloadPendingAssemblies() { if (_pendingDownloads.Count == 0) { return; } _busyContext.IsBusy = true; ThreadPool.QueueUserWorkItem(o => { while (_pendingDownloads.Count > 0) { var fileInfo = _pendingDownloads.Dequeue(); Dispatcher.BeginInvoke(() => { _busyContext.ItemLabel = fileInfo.Name; }); try { var assembly = AssemblyDefinition.ReadAssembly(fileInfo.OpenRead()); if (assembly.IsSilverlight()) { StorageService.CacheSilverlightAssembly(fileInfo.Name, fileInfo.OpenRead()); } else { StorageService.CacheNetAssembly(fileInfo.Name, fileInfo.OpenRead()); } Dispatcher.BeginInvoke(() => LoadOrReplaceAssembly(assembly)); } catch (Exception ex) { Debug.WriteLine(ex.Message); Dispatcher.BeginInvoke(() => new ErrorWindow(ex).Show()); } } Dispatcher.BeginInvoke(() => _busyContext.IsBusy = false); }); }