public void CleanUpOpenSolution() { var directoriesToDelete = new List <string>(); var dte = GetDTE(); InvokeOnUIThread(cancellationToken => { if (dte.Solution != null) { // Save the full path to each project in the solution. This is so we can // cleanup any folders after the solution is closed. foreach (EnvDTE.Project project in dte.Solution.Projects) { if (!string.IsNullOrEmpty(project.FullName)) { directoriesToDelete.Add(Path.GetDirectoryName(project.FullName)); } } // Save the full path to the solution. This is so we can cleanup any folders after the solution is closed. // The solution might be zero-impact and thus has no name, so deal with that var solutionFullName = dte.Solution.FullName; if (!string.IsNullOrEmpty(solutionFullName)) { directoriesToDelete.Add(Path.GetDirectoryName(solutionFullName)); } } }); if (dte.Debugger.CurrentMode != EnvDTE.dbgDebugMode.dbgDesignMode) { // Close the Find Source window in case it's open. // 🐛 This is an ugly mitigation for https://github.com/dotnet/roslyn/issues/33785 _sendKeys.Send(VirtualKey.Escape); dte.Debugger.TerminateAll(); WaitForDesignMode(dte); } CloseSolution(); ErrorList_InProc.Create().WaitForNoErrorsInErrorList(Helper.HangMitigatingTimeout); foreach (var directoryToDelete in directoriesToDelete) { IntegrationHelper.TryDeleteDirectoryRecursively(directoryToDelete); } }
public void CleanUpOpenSolution() { var directoriesToDelete = new List <string>(); var dte = GetDTE(); InvokeOnUIThread(() => { if (dte.Solution != null) { // Save the full path to each project in the solution. This is so we can // cleanup any folders after the solution is closed. foreach (EnvDTE.Project project in dte.Solution.Projects) { if (!string.IsNullOrEmpty(project.FullName)) { directoriesToDelete.Add(Path.GetDirectoryName(project.FullName)); } } // Save the full path to the solution. This is so we can cleanup any folders after the solution is closed. // The solution might be zero-impact and thus has no name, so deal with that var solutionFullName = dte.Solution.FullName; if (!string.IsNullOrEmpty(solutionFullName)) { directoriesToDelete.Add(Path.GetDirectoryName(solutionFullName)); } } }); if (dte.Debugger.CurrentMode != EnvDTE.dbgDebugMode.dbgDesignMode) { dte.Debugger.TerminateAll(); WaitForDesignMode(); } CloseSolution(); ErrorList_InProc.Create().WaitForNoErrorsInErrorList(Helper.HangMitigatingTimeout); foreach (var directoryToDelete in directoriesToDelete) { IntegrationHelper.TryDeleteDirectoryRecursively(directoryToDelete); } }