Beispiel #1
0
        public VsProjectFileTracker(Project project, string fileName, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer, bool followTrackingAfterRename = false)
        {
            this.project = project;
            this.followTrackingAfterRename = followTrackingAfterRename;
            this.fileName           = fileName;
            this.visualStudioTracer = visualStudioTracer;

            SetLastChangeDate(VsxHelper.FindProjectItemByProjectRelativePath(project, fileName));
            SubscribeToDteEvents(dteWithEvents);
        }
        private void BuildEventsOnOnBuildDone(vsBuildScope scope, vsBuildAction action)
        {
            this.visualStudioTracer.Trace("Build Done.", "VsProjectFileTracker");
            ProjectItem item          = VsxHelper.FindProjectItemByProjectRelativePath(project, fileName);
            var         newChangeDate = GetLastChangeDate(item);

            if (newChangeDate != LastChangeDate)
            {
                OnFileChanged(item);
            }
        }
Beispiel #3
0
        private void SubscribeToDteEvents(DteWithEvents dteWithEvents)
        {
            dteWithEvents.ProjectItemsEvents.ItemAdded +=
                item =>
            {
                visualStudioTracer.Trace("Item Added: " + item.Name, "VsProjectFileTracker");
                if (IsItemRelevant(item))
                {
                    OnFileChanged(item);
                }
            };

            dteWithEvents.ProjectItemsEvents.ItemRemoved +=
                item =>
            {
                visualStudioTracer.Trace("Item Removed: " + item.Name, "VsProjectFileTracker");
                if (IsItemRelevant(item))
                {
                    OnFileChanged(null);
                }
            };

            dteWithEvents.ProjectItemsEvents.ItemRenamed +=
                (item, oldName) =>
            {
                visualStudioTracer.Trace("Item Renamed to: " + item.Name + " from " + oldName, "VsProjectFileTracker");
                if (IsItemRelevant(item))
                {
                    OnFileChanged(item);
                }
                else if (IsItemRelevant(item, oldName))
                {
                    if (followTrackingAfterRename)
                    {
                        fileName = VsxHelper.GetProjectRelativePath(item);
                        OnFileChanged(item);
                    }
                    else
                    {
                        OnFileChanged(null);
                    }
                }
            };

            dteWithEvents.DocumentEvents.DocumentSaved +=
                document =>
            {
                visualStudioTracer.Trace("Document Saved: " + document, "VsProjectFileTracker");
                ProjectItem item = document.ProjectItem;
                if (IsItemRelevant(item))
                {
                    OnFileChanged(item);
                }
            };

            dteWithEvents.BuildEvents.OnBuildDone +=
                (scope, action) =>
            {
                this.visualStudioTracer.Trace("Build Done.", "VsProjectFileTracker");
                ProjectItem item          = VsxHelper.FindProjectItemByProjectRelativePath(project, fileName);
                var         newChangeDate = GetLastChangeDate(item);
                if (newChangeDate != LastChangeDate)
                {
                    OnFileChanged(item);
                }
            };
        }
 public ProjectItem GetProjectItem()
 {
     return(VsxHelper.FindProjectItemByProjectRelativePath(project, fileName));
 }