Пример #1
0
        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);
            }
        }
Пример #2
0
 public ProjectItemSettings()
 {
     CopyBuildOutputFileTypesToClipboard = new BuildOutputFileTypes();
 }
Пример #3
0
        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());
        }
Пример #4
0
        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());
        }