diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index f523e0368f..2415de41ff 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -39,6 +39,7 @@ export class ProjectsController { private buildHelper: BuildHelper; projects: Project[] = []; + projFileWatchers = new Map(); constructor(projTreeViewProvider: SqlDatabaseProjectTreeViewProvider) { this.projectTreeViewProvider = projTreeViewProvider; @@ -166,6 +167,12 @@ export class ProjectsController { public closeProject(treeNode: BaseProjectTreeItem) { const project = this.getProjectFromContext(treeNode); this.projects = this.projects.filter((e) => { return e !== project; }); + + if (this.projFileWatchers.has(project.projectFilePath)) { + this.projFileWatchers.get(project.projectFilePath)!.dispose(); + this.projFileWatchers.delete(project.projectFilePath); + } + this.refreshProjectsTree(); } @@ -442,6 +449,7 @@ export class ProjectsController { try { await vscode.commands.executeCommand(constants.vscodeOpenCommand, vscode.Uri.file(project.projectFilePath)); const projFileWatcher: vscode.FileSystemWatcher = vscode.workspace.createFileSystemWatcher(project.projectFilePath); + this.projFileWatchers.set(project.projectFilePath, projFileWatcher); projFileWatcher.onDidChange(async (projectFileUri: vscode.Uri) => { const result = await vscode.window.showInformationMessage(constants.reloadProject, constants.yesString, constants.noString); @@ -450,6 +458,15 @@ export class ProjectsController { this.reloadProject(projectFileUri); } }); + + // stop watching for changes to the sqlproj after it's closed + const closeSqlproj = vscode.workspace.onDidCloseTextDocument((d) => { + if (this.projFileWatchers.has(d.uri.fsPath)) { + this.projFileWatchers.get(d.uri.fsPath)!.dispose(); + this.projFileWatchers.delete(d.uri.fsPath); + closeSqlproj.dispose(); + } + }); } catch (err) { vscode.window.showErrorMessage(utils.getErrorMessage(err)); }