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); } }
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)); }