/// <summary>
        /// Enumerates all items in the project except those in the "Reference" group.
        /// </summary>
        /// <param name="project">The project from which to retrieve the items.</param>
        /// <returns>A list of item "Include" values.  For items that specify files, these will be the file names.</returns>
        /// <exception cref="System.ArgumentNullException">Thrown if <c>project</c> is null.</exception>
        public IEnumerable <string> AllItemsInProject(IVsProject project)
        {
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }

            string       projectDir = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(project));
            IVsHierarchy hierarchy  = project as IVsHierarchy;

            return
                (ChildrenOf(hierarchy, VSConstants.VSITEMID.Root)
                 .Select(
                     id =>
            {
                string name = null;
                project.GetMkDocument((uint)id, out name);
                if (name != null && name.Length > 0 && !Path.IsPathRooted(name))
                {
                    name = Utilities.AbsolutePathFromRelative(name, projectDir);
                }
                return name;
            })
                 .Where(File.Exists));
        }
        /// <summary>
        /// Enumerates all items in the project except those in the "Reference" group.
        /// </summary>
        /// <param name="project">The project from which to retrieve the items.</param>
        /// <returns>A list of item "Include" values.  For items that specify files, these will be the file names.</returns>
        /// <exception cref="System.ArgumentNullException">Thrown if <c>project</c> is null.</exception>
        public ICollection <string> AllItemsInProject(IVsProject project)
        {
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }

            string       projectDir = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(project));
            IVsHierarchy hierarchy  = project as IVsHierarchy;

            List <string> allNames = ChildrenOf(hierarchy, HierarchyConstants.VSITEMID_ROOT).ConvertAll <string>(
                delegate(uint id)
            {
                string name = null;
                project.GetMkDocument(id, out name);
                if (name != null && name.Length > 0 && !Path.IsPathRooted(name))
                {
                    name = Utilities.AbsolutePathFromRelative(name, projectDir);
                }
                return(name);
            });

            allNames.RemoveAll(
                delegate(string name)
            {
                return(!File.Exists(name));
            });

            return(allNames);
        }
        private void ReadConfigFromProject()
        {
            string  projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));
            Project dteProject    = GetDTEProject(_project);

            if (dteProject.Globals.get_VariableExists(_termTablesName))
            {
                string termTables = (string)dteProject.Globals[_termTablesName];

                foreach (string table in termTables.Split(';'))
                {
                    if (table != null && table.Length > 0)
                    {
                        if (Path.IsPathRooted(table))
                        {
                            _termTableFiles.Add(table);
                        }
                        else
                        {
                            _termTableFiles.Add(Utilities.AbsolutePathFromRelative(table, projectFolder));
                        }
                    }
                }
            }

            if (dteProject.Globals.get_VariableExists(_ignoreInstancesName))
            {
                string ignoreInstances = (string)dteProject.Globals[_ignoreInstancesName];
                _ignoreInstances.AddRange(BuildTask.Factory.DeserializeIgnoreInstances(ignoreInstances, projectFolder));
            }
        }
        void PersistIgnoreInstances()
        {
            string projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));
            string serialization = BuildTask.Factory.SerializeIgnoreInstances(_ignoreInstances, projectFolder);

            CreateBuildTaskIfNecessary();
            _buildTask.SetParameter("IgnoreInstances", serialization);
        }
        void PersistTermTables()
        {
            CreateBuildTaskIfNecessary();

            string        projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));
            List <string> relativePaths = Utilities.RelativizePathsIfPossible(_termTableFiles, projectFolder);

            _buildTask.SetParameter("TermTables", Utilities.Concatenate(relativePaths, ";"));
        }
        private void PersistIgnoreInstances()
        {
            string projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));
            string serialization = BuildTask.Factory.SerializeIgnoreInstances(_ignoreInstances, projectFolder);

            Project dteProject = GetDTEProject(_project);

            dteProject.Globals[_ignoreInstancesName] = serialization;
            dteProject.Globals.set_VariablePersists(_ignoreInstancesName, true);
        }
        private void PersistTermTables()
        {
            string        projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));
            List <string> relativePaths = Utilities.RelativizePathsIfPossible(_termTableFiles, projectFolder);

            Project dteProject = GetDTEProject(_project);

            dteProject.Globals[_termTablesName] = Utilities.Concatenate(relativePaths, ";");
            dteProject.Globals.set_VariablePersists(_termTablesName, true);
        }
        private Project GetDTEProject(IVsProject project)
        {
            string projectPath = ProjectUtilities.GetProjectFilePath(project);

            DTE dte = _serviceProvider.GetService(typeof(DTE)) as DTE;

            foreach (Project dteProject in dte.Solution.Projects)
            {
                if (String.Compare(dteProject.FileName, projectPath, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    return(dteProject);
                }
            }

            return(null);
        }
        private static void CreateTaskIfNecessary(IVsProject project)
        {
            Project msbuildProject      = MSBuildProjectFromIVsProject(project);
            ProjectTargetElement target = msbuildProject.Xml.Targets.FirstOrDefault(element => element.Name == "AfterBuild");

            if (target == null)
            {
                target = msbuildProject.Xml.AddTarget("AfterBuild");
            }


            string importFolder       = Path.GetDirectoryName(typeof(CodeSweep.BuildTask.ScannerTask).Module.FullyQualifiedName);
            string importPath         = Utilities.EncodeProgramFilesVar(importFolder) + "\\CodeSweep.targets";
            string installedCondition = "Exists('" + importPath + "')";

            if (GetNamedTask(target, "ScannerTask") == null)
            {
                string             projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(project));
                ProjectTaskElement newTask       = target.AddTask("ScannerTask");
                newTask.Condition       = installedCondition + " and '$(" + RunWithBuildFlag + ")' == 'true'";
                newTask.ContinueOnError = "false";
                newTask.SetParameter("FilesToScan", CodeSweep.Utilities.Concatenate(AllItemGroupsInProject(msbuildProject.Xml), ";"));
                newTask.SetParameter("TermTables", Utilities.RelativePathFromAbsolute(Globals.DefaultTermTablePath, Path.GetDirectoryName(msbuildProject.FullPath)));
                newTask.SetParameter("Project", "$(MSBuildProjectFullPath)");
            }

            bool found = false;

            foreach (ProjectImportElement import in msbuildProject.Xml.Imports)
            {
                if (import.Project == importPath)
                {
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                ProjectImportElement importElement = msbuildProject.Xml.AddImport(importPath);
                importElement.Condition = installedCondition;
            }
        }
        private void ReadConfigFromBuildTask()
        {
            string projectFolder = Path.GetDirectoryName(ProjectUtilities.GetProjectFilePath(_project));

            _ignoreInstances.AddRange(BuildTask.Factory.DeserializeIgnoreInstances(_buildTask.GetParameter("IgnoreInstances"), projectFolder));

            foreach (string termTable in _buildTask.GetParameter("TermTables").Split(';'))
            {
                if (termTable != null && termTable.Length > 0)
                {
                    if (Path.IsPathRooted(termTable))
                    {
                        _termTableFiles.Add(termTable);
                    }
                    else
                    {
                        _termTableFiles.Add(Utilities.AbsolutePathFromRelative(termTable, projectFolder));
                    }
                }
            }
        }
Example #11
0
        public int OnBeforeCloseProject(IVsHierarchy pHierarchy, int fRemoved)
        {
            string projFile = ProjectUtilities.GetProjectFilePath(pHierarchy as IVsProject);

            if (!string.IsNullOrEmpty(projFile))
            {
                // Remove all tasks for the project that is being closed.
                for (int i = 0; i < _tasks.Count; ++i)
                {
                    if (_tasks[i].ProjectFile == projFile)
                    {
                        _tasks.RemoveAt(i);
                        --i;
                    }
                }

                Refresh();
            }

            return(VSConstants.S_OK);
        }
 private static Project MSBuildProjectFromIVsProject(IVsProject project)
 {
     return(ProjectCollection.GlobalProjectCollection.GetLoadedProjects(ProjectUtilities.GetProjectFilePath(project)).FirstOrDefault());
 }
Example #13
0
        void GatherProjectInfo(IEnumerable <IVsProject> projects)
        {
            _projectsToScan.Clear();
            _totalFiles = 0;

            foreach (IVsProject project in projects)
            {
                List <string> filesToScan    = new List <string>();
                List <string> termTableFiles = new List <string>();

                if (Factory.GetProjectConfigurationStore(project).HasConfiguration)
                {
                    filesToScan.AddRange(Factory.GetBuildManager().AllItemsInProject(project));
                    termTableFiles.AddRange(Factory.GetProjectConfigurationStore(project).TermTableFiles);
                    _totalFiles += (uint)filesToScan.Count;
                }

                _projectsToScan.Add(new ProjectConfiguration(filesToScan, termTableFiles, ProjectUtilities.GetProjectFilePath(project)));
            }
        }