/// <summary> /// Initializes a new instance of the <see cref="ProjectEventsDisabler"/> class. /// </summary> /// <param name="project">The project.</param> public ProjectEventsDisabler(IVsSolutionExplorer solutionManager, string projectName) { Guard.ArgumentNotNull(solutionManager, "solutionManager"); Guard.ArgumentNotNullOrEmptyString(projectName, "projectName"); _solutionManager = solutionManager; _solutionManager.DisableReferenceEventsOnProject(projectName); }
/// <summary> /// Creates the project. /// </summary> /// <param name="solutionManager"></param> /// <param name="solutionFolderPath"></param> /// <param name="name">The name.</param> /// <param name="template">The template.</param> /// <param name="defaultTemplate"></param> /// <returns></returns> public ProjectNode CreateProject(IVsSolutionExplorer solutionManager, string projectTemplatesFolder, string solutionFolderPath, string name, string assemblyName, string template, string defaultNamespace, string solutionName) { Guard.ArgumentNotNull(solutionManager, "solutionManager"); Guard.ArgumentNotNullOrEmptyString(name, "name"); Guard.ArgumentNotNullOrEmptyString(template, "template"); Guard.ArgumentNotNullOrEmptyString(solutionName, "solutionName"); Solution2 sln = this.ExtObject as Solution2; if (sln == null) return null; var projectName = name; var projectDirectory = name; name = name.Replace(@"\", "/"); var pos = name.LastIndexOf('/'); if (pos >= 0) { projectDirectory = name.Substring(0, pos); projectName = name.Substring(pos + 1); } if (projectName.Length == 0) throw new Exception("Invalid project name"); //var node = RecursiveFindByName(projectName); //if (node != null && node.IsProject) // return node.CastToProjectNode(); string templatePath = template; try { // TODO using (ProjectEventsDisabler disabler = new ProjectEventsDisabler(solutionManager, name)) { EnvDTE.Project p; string projectFolder = System.IO.Path.Combine(ProjectDir, projectDirectory); HierarchyNode hierarchyNode = RecursiveFindByName(projectName); ProjectNode projectNode = null; if (hierarchyNode != null && hierarchyNode.IsProject) projectNode = hierarchyNode.CastToProjectNode(); if (projectNode == null) { // -------------------------------------------------------------- // Résolution du template // Si le chemin n'est pas absolu if (!System.IO.Path.IsPathRooted(templatePath)) { // Recherche dans les templates VisualFabric templatePath = projectTemplatesFolder != null ? System.IO.Path.Combine(projectTemplatesFolder, template) : template; if (!File.Exists(templatePath)) { // Recherche d'abord dans les templates de l'utilisateur templatePath = System.IO.Path.Combine(solutionManager.GetExportedProjectTemplatesDir(), template); if (!File.Exists(templatePath)) { // Sinon dans les templates standards string wizardName = template.Replace("\\", "/"); string lang = null; pos = wizardName.LastIndexOf('/'); if (pos >= 0) { lang = wizardName.Substring(0, pos); wizardName = wizardName.Substring(pos + 1); } try { templatePath = sln.GetProjectTemplate(wizardName, lang); } catch { throw new Exception(String.Format("Incorrect template name {0}", template)); } } } } // Décompression du fichier dans un répertoire temporaire templatePath = ExtractProjectItemInTemporaryFolder(templatePath, projectName, defaultNamespace, solutionName); if (templatePath == null || !File.Exists(templatePath)) throw new Exception("Invalid project template " + template); if (!String.IsNullOrEmpty(solutionFolderPath)) { EnvDTE80.SolutionFolder container = CreateSolutionFolder(solutionFolderPath).Object as EnvDTE80.SolutionFolder; container.AddFromTemplate(templatePath, projectFolder, projectName); p = container.Parent.ProjectItems.Item(container.Parent.ProjectItems.Count).Object as EnvDTE.Project; } else { Utils.RemoveDirectory(projectFolder); sln.AddFromTemplate(templatePath, projectFolder, projectName, false); p = sln.Projects.Item(sln.Projects.Count); } } else { p = projectNode.Project; } if (p != null) { if (!String.IsNullOrEmpty(defaultNamespace)) { try { p.Properties.Item("DefaultNamespace").Value = defaultNamespace; } catch { /* projet web */ } } if (!String.IsNullOrEmpty(assemblyName)) { try { p.Properties.Item("AssemblyName").Value = assemblyName; } catch { /* projet web */ } } } return projectNode ?? new ProjectNode(Solution, p.UniqueName); } } finally { Utils.RemoveDirectory(System.IO.Path.GetDirectoryName(templatePath)); } }