protected override void OnExec() { if (template.IsVisibleFromContextMenu) { IConfigurationService configService = (IConfigurationService)ServiceProvider.GetService(typeof(IConfigurationService), true); if (template.Kind == TemplateKind.Project) { IVsSolution3 solution = (IVsSolution3)ServiceProvider.GetService(typeof(SVsSolution), true); IVsBrowseProjectLocation browseProjectLocation = null; uint cnpvdeFlags = (uint)(__VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_ALWAYSADDTOSOLUTION | __VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_ADDNESTEDTOSELECTION); //browseProjectLocation = this; //cnpvdeFlags |= (uint)(__VSCREATENEWPROJVIADLGEXFLAGS.VNPVDE_OVERRIDEBROWSEBUTTON); solution.CreateNewProjectViaDlgEx(Microsoft.Practices.RecipeFramework.VisualStudio.Properties.Resources.IDD_ADDPROJECTDLG, null, configService.CurrentPackage.Caption, this.template.Name, null, cnpvdeFlags, browseProjectLocation); } else if (template.Kind == TemplateKind.ProjectItem) { uint itemid = 0; IVsProject vsProject = DteHelper.GetCurrentSelection(this.ServiceProvider, out itemid) as IVsProject; IVsAddProjectItemDlg2 addProjectItemDlg = (IVsAddProjectItemDlg2)ServiceProvider.GetService(typeof(SVsAddProjectItemDlg), true); __VSADDITEMFLAGS addItemsFlags = __VSADDITEMFLAGS.VSADDITEM_AddNewItems | __VSADDITEMFLAGS.VSADDITEM_SuggestTemplateName; Guid projectGuid = this.template.ProjectFactory; string location = String.Empty; string filter = String.Empty; int dontShowAgain = VSConstantsEx.TRUE; addProjectItemDlg.AddProjectItemDlgTitled(itemid, ref projectGuid, vsProject, (uint)addItemsFlags, null, configService.CurrentPackage.Caption, this.template.Name, ref location, ref filter, out dontShowAgain); } } }
public static bool AddProjectItemDialog( IServiceProvider provider, string title, string templateName, bool addExisting = false) { Guard.ArgumentNotNull(provider, "provider"); Guard.ArgumentNotNullOrEmptyString(title, "title"); Guard.ArgumentNotNullOrEmptyString(templateName, "templateName"); try { IVsSolution solution = provider.GetService(typeof(IVsSolution)) as IVsSolution; uint pitemid = 0; using (HierarchyNode hierarchy = new HierarchyNode(solution, DteHelper2.GetCurrentSelection(provider, out pitemid))) using (HierarchyNode child = new HierarchyNode(hierarchy, pitemid)) { Guid rguidProject = hierarchy.TypeGuid; IVsProject project = child.IsSolution ? null : (IVsProject)child.Hierarchy; string strFilter = String.Empty; string templatePath = GetTemplatePathFromProject(hierarchy); int iDontShowAgain; IVsAddProjectItemDlg2 addProjectItemDlg2 = (IVsAddProjectItemDlg2)provider.GetService(typeof(SVsAddProjectItemDlg)); uint uiFlags; if (addExisting) { uiFlags = (uint)(__VSADDITEMFLAGS.VSADDITEM_AddExistingItems | __VSADDITEMFLAGS.VSADDITEM_ProjectHandlesLinks | __VSADDITEMFLAGS.VSADDITEM_AllowStickyFilter | __VSADDITEMFLAGS.VSADDITEM_ShowLocationField); //strFilter = "Data Contract (*.datacontract)"; } else { uiFlags = (uint)(__VSADDITEMFLAGS.VSADDITEM_AddNewItems | __VSADDITEMFLAGS.VSADDITEM_SuggestTemplateName | __VSADDITEMFLAGS.VSADDITEM_AllowHiddenTreeView | __VSADDITEMFLAGS.VSADDITEM_AllowStickyFilter | __VSADDITEMFLAGS.VSADDITEM_ShowLocationField); } ErrorHandler.ThrowOnFailure( addProjectItemDlg2.AddProjectItemDlgTitled( child.IsRoot ? VSConstants.VSITEMID_ROOT : pitemid, ref rguidProject, project, uiFlags, string.Format(CultureInfo.CurrentCulture, title, hierarchy.Name), templatePath, templateName, ref strLocation, ref strFilter, out iDontShowAgain), VSConstants.OLE_E_PROMPTSAVECANCELLED); return(true); } } catch (Exception error) { Logger.Write(error); } return(false); }