How do I programmatically unload a project from a solution?


Happy new year everyone!  Here’s my first technical post about the Visual Studio SDK :)


Back in December, I had a conference call with a potential partner who’s building a custom integrated development environment on top of Visual Studio.


Once of the issues they ran into was trying to figure out how to unload a project from a solution.  They were looking for an easy way to do that but ended up with a hacky implementation.


I chatted with one of our developers (Ole) on the VS SDK team and he provided some sample code.


The code below can be copy-and-pasted into the menu command handler if you use the wizard to create a new VS Package with a new menu command.  Additionally, don’t forget to add a reference to the EnvDTE assembly.


//Get the DTE object


            DTE dte = GetService(typeof(SDTE)) as DTE;


            Debug.Assert(dte != null);


 


            //Get the selected project


            Project selectedProject = null;


            if (dte.SelectedItems.Count > 0)


            {


                selectedProject = ((SelectedItem)dte.SelectedItems.Item(1)).Project;


            }


            if (selectedProject != null)


            {


                IVsSolution solutionService = GetService(typeof(SVsSolution)) as IVsSolution;


                Debug.Assert(solutionService != null);


 


                IVsHierarchy selectedHierarchy;


                ErrorHandler.ThrowOnFailure(solutionService.GetProjectOfUniqueName(selectedProject.UniqueName, out selectedHierarchy));


                Debug.Assert(selectedHierarchy != null);


 


                ErrorHandler.ThrowOnFailure(solutionService.CloseSolutionElement((uint)__VSSLNCLOSEOPTIONS.SLNCLOSEOPT_UnloadProject, selectedHierarchy, 0));


 


            }


 


Comments (3)

  1. This month’s letter includes information about what the VSX team has been working on in the past few

  2. jameslau-MS says:

    This is a nice first technical blog!