Agregar una carpeta de soluciones a la plantilla de proyecto de Visual Studio

¿Es posible agregar una carpeta de solución con la plantilla de proyecto? Si no está integrado en la funcionalidad, ¿es posible crear una tarea personalizada para esto?

Esto es un poco complicado. No puedes hacer esto con una plantilla de proyecto simple. Las plantillas de proyecto solo pueden funcionar en un solo nivel de proyecto. Para implementar una lógica más avanzada, necesita implementar WizardExtension y registrarlo dentro del archivo .vstemplate de su plantilla.

  AssemblyInGACWithSomeLogic MySuperWizardExtension  

Puede encontrar más información sobre las extensiones de asistente en MSDN .

Es posible, para saber cómo puede consultar este sitio web de MSDN . O para el resumen total

Puedes hacerlo usando asistentes de plantillas. Supongo que ya sabes como implementarlo.

Entonces, dentro del método RunFinished, escribe estas líneas:

  var destFolder = Directory.GetParent(path).Parent; System.IO.Directory.CreateDirectory(destFolder.FullName + "\\.nuget"); ((Solution2) _dte.Solution).AddSolutionFolder(destFolder.FullName + "\\.nuget"); 

Para la clase Solution2 tienes que hacer referencia a EnvDTE80.dll. _dte debe establecerse desde el método RunStarted.

 private DTE _dte; public void RunStarted(object automationObject, Dictionary replacementsDictionary, WizardRunKind runKind, object[] customParams) { _dte = (DTE)automationObject; } 

Estoy usando los siguientes fragmentos de código en mi Asistente de plantillas de proyecto (vea la respuesta de Mike Chaliy):

  private static SolutionFolder GetSolutionFolder(Solution2 solution) { var project = GetSolutionFolderProject(solution); return (SolutionFolder) project.Object; } private static Project GetSolutionFolderProject(Solution2 solution) { var project = solution.Projects.Cast().FirstOrDefault(p => p.Name == "Solution Items"); if (project == null) project = solution.AddSolutionFolder("Solution Items"); return project; } 

donde _solution = (Solution2) _dte.Solution;