//private class ProjectItemAndTypeEqualityComparer : IEqualityComparer<ProjectItemAndType> //{ // public bool Equals(ProjectItemAndType x, ProjectItemAndType y) // { // return String.Equals(x.ProjectItem.Name, y.ProjectItem.Name, StringComparison.OrdinalIgnoreCase) && // String.Equals(x.Type.Class, y.Type.Class, StringComparison.OrdinalIgnoreCase) && // String.Equals(x.Type.Namespace, y.Type.Namespace, StringComparison.OrdinalIgnoreCase); // } // public int GetHashCode(ProjectItemAndType obj) // { // return ($"{obj.ProjectItem.Name};{obj.Type.Namespace}.{obj.Type.Class}").GetHashCode(); // } //} private void ReloadSolution() { SolutionLoadState = SolutionLoadState.Loading; // Load solution into _solution. lock (_solutionLock) { var solution = _mvvmToolsPackage.Ide.Solution; var solutionModel = new ProjectModel( Path.GetFileNameWithoutExtension(solution.FullName), solution.FullName, null, ProjectKind.Solution, null, null); // Add each of the top level projects and children to the local solutionModel. var topLevelProjects = solution.Projects.Cast <Project>().Where(p => p.Name != "Solution Items").ToArray(); foreach (var p in topLevelProjects) { var projectModels = GetProjectModelsRecursive(p); solutionModel.Children.AddRange(projectModels); } // Set the backing field as to not create a deadlock on _solutionLock. _solution = solutionModel; } SolutionLoadState = SolutionLoadState.Loaded; }
int IVsSolutionEvents3.OnAfterCloseSolution(object pUnkReserved) { SolutionLoadState = SolutionLoadState.NoSolution; return(VsConstants.S_OK); }
int IVsSolutionEvents3.OnBeforeCloseSolution(object pUnkReserved) { SolutionLoadState = SolutionLoadState.Unloading; return(VsConstants.S_OK); }
// Several interfaces implemented here. public int OnBeforeOpenSolution(string pszSolutionFilename) { SolutionLoadState = SolutionLoadState.Loading; return(VsConstants.S_OK); }