private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); if (!TryGetFilePath(out var filePath)) { return; } var manifest = Manifest.FromFile(filePath); manifest.MarkSelected(_es.GetInstalledExtensions()); var dialog = ImportWindow.Open(manifest.Extensions, Purpose.Import); if (dialog.DialogResult == true && dialog.SelectedExtension.Any()) { var installSystemWide = dialog.InstallSystemWide; var toInstall = dialog.SelectedExtension.Select(ext => ext.ID).ToList(); var repository = ServiceProvider.GetService(typeof(SVsExtensionRepository)) as IVsExtensionRepository; Assumes.Present(repository); IEnumerable <GalleryEntry> marketplaceEntries = repository.GetVSGalleryExtensions <GalleryEntry>(toInstall, 1033, false).Where(x => x.DownloadUrl != null); var tempDir = PrepareTempDir(); var dte = ServiceProvider.GetService(typeof(DTE)) as DTE; Assumes.Present(dte); dte.StatusBar.Text = "Downloading extensions..."; HasRootSuffix(out var rootSuffix); ThreadHelper.JoinableTaskFactory.Run(() => DownloadExtensionsAsync(installSystemWide, marketplaceEntries, tempDir, dte, rootSuffix)); } }
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); var dte = ServiceProvider.GetService(typeof(DTE)) as DTE; Assumes.Present(dte); if (string.IsNullOrEmpty(dte.Solution?.FileName)) { ShowMessageBox("The solution must be saved in order to manage solution extensions."); return; } var fileName = Path.ChangeExtension(dte.Solution.FileName, ".vsext"); try { var extensions = _es.GetInstalledExtensions().ToList(); if (File.Exists(fileName)) { var manifest = Manifest.FromFile(fileName); extensions = extensions.Union(manifest.Extensions).ToList(); foreach (Extension ext in extensions) { ext.Selected = manifest.Extensions.Contains(ext); } } else { foreach (Extension ext in extensions) { ext.Selected = false; } } var dialog = ImportWindow.Open(extensions, Purpose.List); if (dialog.DialogResult == true) { var manifest = new Manifest(dialog.SelectedExtension); var json = JsonConvert.SerializeObject(manifest, Formatting.Indented); File.WriteAllText(fileName, json); // Add the file to the solution items folder if it's new or if it's not there already. Project solItems = GetOrCreateSolutionItems((DTE2)dte); solItems.ProjectItems.AddFromFile(fileName); VsShellUtilities.OpenDocument(ServiceProvider, fileName); } } catch (Exception ex) { ShowMessageBox(ex.Message); } }
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); if (!TryGetFilePath(out string filePath)) { return; } var manifest = Manifest.FromFile(filePath); manifest.MarkSelected(_es.GetInstalledExtensions()); var dialog = ImportWindow.Open(manifest.Extensions, Purpose.Install); if (dialog.DialogResult == true && dialog.SelectedExtension.Any()) { var toInstall = dialog.SelectedExtension.Select(ext => ext.ID).ToList(); var repository = ServiceProvider.GetService(typeof(SVsExtensionRepository)) as IVsExtensionRepository; Assumes.Present(repository); IEnumerable <GalleryEntry> marketplaceEntries = repository.GetVSGalleryExtensions <GalleryEntry>(toInstall, 1033, false); string tempDir = PrepareTempDir(); var dte = ServiceProvider.GetService(typeof(DTE)) as DTE; Assumes.Present(dte); dte.StatusBar.Text = "Downloading extensions..."; HasRootSuffix(out string rootSuffix); ThreadHelper.JoinableTaskFactory.RunAsync(async() => { await DownloadExtensionAsync(marketplaceEntries, tempDir); InvokeVsixInstaller(tempDir, rootSuffix); await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); dte.StatusBar.Text = "Extensions downloaded. Starting VSIX Installer..."; }); } }