diff --git a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs index f6712ab668..24c1df605b 100644 --- a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs +++ b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs @@ -26,6 +26,7 @@ namespace ICSharpCode.SharpDevelop.Project FileSystemWatcher watcher; string fileName; bool enabled = true; + DateTime lastWriteTime; public ProjectChangeWatcher(string fileName) { @@ -33,6 +34,7 @@ namespace ICSharpCode.SharpDevelop.Project SD.MainThread.VerifyAccess(); activeWatchers.Add(this); + UpdateLastWriteTime(); SD.Workbench.MainWindow.Activated += MainFormActivated; } @@ -53,6 +55,26 @@ namespace ICSharpCode.SharpDevelop.Project { fileName = newFileName; } + + void UpdateLastWriteTime() + { + // Save current last write time attribute + FileInfo fileInfo = new FileInfo(fileName); + if (fileInfo != null) { + lastWriteTime = fileInfo.LastWriteTimeUtc; + } + } + + bool LastWriteTimeHasChanged() + { + // Save current last write time attribute + FileInfo fileInfo = new FileInfo(fileName); + if (fileInfo != null) { + return lastWriteTime != fileInfo.LastWriteTimeUtc; + } + + return true; // File doesn't exist anymore? + } void SetWatcher() { @@ -107,7 +129,14 @@ namespace ICSharpCode.SharpDevelop.Project void OnFileChangedEvent(object sender, FileSystemEventArgs e) { - LoggingService.Debug("Project file " + e.Name + " was changed externally: {1}" + e.ChangeType); + // Last write time really has changed? + if (!LastWriteTimeHasChanged()) { + LoggingService.DebugFormatted("Attributes of project file {0} have been set externally ({1}), but no relevant changes detected.", e.Name, e.ChangeType); + return; + } + + LoggingService.DebugFormatted("Project file {0} was changed externally: {1}", e.Name, e.ChangeType); + UpdateLastWriteTime(); if (!wasChangedExternally) { wasChangedExternally = true; if (SD.Workbench.IsActiveWindow) {