private void ProjectCopyBuildOutputFilesToClipBoard(ProjectItem projItem) { try { Project project = _dte.Solution.GetProject(x => x.UniqueName == projItem.UniqueName); BuildOutputFileTypes fileTypes = _packageContext.ControlSettings.ProjectItemSettings.CopyBuildOutputFileTypesToClipboard; if (fileTypes.IsEmpty) { MessageBox.Show(@"Nothing to copy: all file types unchecked.", Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Error); return; } string[] filePaths = project.GetBuildOutputFilePaths(fileTypes, projItem.Configuration, projItem.Platform).ToArray(); if (filePaths.Length == 0) { MessageBox.Show(@"Nothing copied: selected build output groups are empty.", Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Information); return; } string[] existFilePaths = filePaths.Where(File.Exists).ToArray(); if (existFilePaths.Length == 0) { string msg = GetCopyBuildOutputFilesToClipboardActionMessage("Nothing copied. {0} wasn't found{1}", filePaths); MessageBox.Show(msg, Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Warning); return; } ClipboardHelper.SetFileDropList(existFilePaths); if (existFilePaths.Length == filePaths.Length) { string msg = GetCopyBuildOutputFilesToClipboardActionMessage("Copied {0}{1}", existFilePaths); MessageBox.Show(msg, Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Information); } else { string[] notExistFilePaths = filePaths.Except(existFilePaths).ToArray(); string copiedMsg = GetCopyBuildOutputFilesToClipboardActionMessage("Copied {0}{1}", existFilePaths); string notFoundMsg = GetCopyBuildOutputFilesToClipboardActionMessage("{0} wasn't found{1}", notExistFilePaths); string msg = string.Concat(copiedMsg, Environment.NewLine, Environment.NewLine, notFoundMsg); MessageBox.Show(msg, Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Warning); } } catch (Win32Exception ex) { string msg = string.Format("Error copying files to the Clipboard: 0x{0:X} ({1})", ex.ErrorCode, ex.Message); ex.Trace(msg); MessageBox.Show(msg, Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception ex) { ex.TraceUnknownException(); MessageBox.Show(ex.Message, Resources.ProductName, MessageBoxButton.OK, MessageBoxImage.Error); } }
public ProjectItemSettings() { CopyBuildOutputFileTypesToClipboard = new BuildOutputFileTypes(); }
public static IEnumerable <string> GetBuildOutputFilePaths(this Project project, BuildOutputFileTypes fileTypes, string configuration = null, string platform = null) { EnvDTE.Configuration targetConfig; if (configuration != null && platform != null) { targetConfig = project.ConfigurationManager.Item(configuration, platform); } else { targetConfig = project.ConfigurationManager.ActiveConfiguration; } var groups = new List <string>(); if (fileTypes.LocalizedResourceDlls) { groups.Add(BuildOutputGroup.LocalizedResourceDlls); } if (fileTypes.XmlSerializer) { groups.Add("XmlSerializer"); } if (fileTypes.ContentFiles) { groups.Add(BuildOutputGroup.ContentFiles); } if (fileTypes.Built) { groups.Add(BuildOutputGroup.Built); } if (fileTypes.SourceFiles) { groups.Add(BuildOutputGroup.SourceFiles); } if (fileTypes.Symbols) { groups.Add(BuildOutputGroup.Symbols); } if (fileTypes.Documentation) { groups.Add(BuildOutputGroup.Documentation); } var filePaths = new List <string>(); // var mam = targetConfig.OutputGroups.Cast<OutputGroup>().ToList(); //var key = new Dictionary<string, List<string>>(); //foreach (var ss in mam) //{ // var fileUrls = (object[])ss.FileURLs; // // key.Add(ss.CanonicalName ?? ss.DisplayName, fileUrls.Select(x => new Uri(x.ToString()).LocalPath).ToList()); //} foreach (var groupName in groups) { try { var group = targetConfig.OutputGroups.Item(groupName); var fileUrls = (object[])group.FileURLs; filePaths.AddRange(fileUrls.Select(x => new Uri(x.ToString()).LocalPath)); } catch (ArgumentException ex) { var msg = $"Build Output Group \"{groupName}\" not found (Project Kind is \"{project.Kind}\")."; //TODO: LogManager.ForContext<Project>().Warning(ex, "{Msg}", msg); } } return(filePaths.Distinct()); }
public static IEnumerable <string> GetBuildOutputFilePaths(this Project project, BuildOutputFileTypes fileTypes, string configuration = null, string platform = null) { Configuration targetConfig; if (configuration != null && platform != null) { targetConfig = project.ConfigurationManager.Item(configuration, platform); } else { targetConfig = project.ConfigurationManager.ActiveConfiguration; } var groups = new List <string>(); if (fileTypes.LocalizedResourceDlls) { groups.Add(BuildOutputGroup.LocalizedResourceDlls); } if (fileTypes.XmlSerializer) { groups.Add("XmlSerializer"); } if (fileTypes.ContentFiles) { groups.Add(BuildOutputGroup.ContentFiles); } if (fileTypes.Built) { groups.Add(BuildOutputGroup.Built); } if (fileTypes.SourceFiles) { groups.Add(BuildOutputGroup.SourceFiles); } if (fileTypes.Symbols) { groups.Add(BuildOutputGroup.Symbols); } if (fileTypes.Documentation) { groups.Add(BuildOutputGroup.Documentation); } var filePaths = new List <string>(); foreach (string groupName in groups) { try { var group = targetConfig.OutputGroups.Item(groupName); var fileUrls = (object[])group.FileURLs; filePaths.AddRange(fileUrls.Select(x => new Uri(x.ToString()).LocalPath)); } catch (ArgumentException ex) { var msg = $"Build Output Group \"{groupName}\" not found (Project Kind is \"{project.Kind}\")."; ex.Trace(msg, EventLogEntryType.Warning); } } return(filePaths.Distinct()); }