public ProjectSnapshot NewSnapshot(string projFullPath)
        {
            ProjectSnapshot ps = GetSnapshot(projFullPath);
            if (ps != null)
            {
                return ps;
            }

            string saveFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                @"AutoProjectFiles\Snapshots\" + Guid.NewGuid().ToString() + ".xml");
            ps = new ProjectSnapshot(saveFile);
            ps.ProjectFile = projFullPath;
            ps.Save();
            Snapshots().Add(ps);
            return ps;
        }
        private void LoadSnapshots()
        {
            string appDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "AutoProjectFiles");
            if (!Directory.Exists(appDir))
            {
                Directory.CreateDirectory(appDir);
            }

            string snapshotDir = Path.Combine(appDir, "Snapshots");
            if (!Directory.Exists(snapshotDir))
            {
                Directory.CreateDirectory(snapshotDir);
            }

            snapshots = new List<ProjectSnapshot>();
            foreach (string f in Directory.GetFiles(snapshotDir, "*.xml"))
            {
                ProjectSnapshot ps = new ProjectSnapshot(f);
                ps.Load();
                snapshots.Add(ps);
            }
        }
        private void GetOperableFiles(ProjectSnapshot ps, out List<string> newFiles, out List<string> delFiles)
        {
            List<string> currentSet = VsUtil.DirectoryTraversal(Path.GetDirectoryName(ps.ProjectFile), ps.Folders);

            HashSet<string> newSet = new HashSet<string>(currentSet);
            newSet.ExceptWith(ps.Entries);
            newFiles = new List<string>(newSet);

            HashSet<string> delSet = new HashSet<string>(ps.Entries);
            delSet.ExceptWith(currentSet);
            delFiles = new List<string>(delSet);
        }