Ajouter un dossier de solution au modèle de projet Visual Studio

Est-il possible d’append un dossier de solution avec le modèle de projet? Si ce n’est pas une fonctionnalité intégrée, est-il possible de créer une tâche personnalisée pour cela?

C’est un peu délicat. Vous ne pouvez pas faire cela avec un modèle de projet simple. Les modèles de projet ne peuvent fonctionner qu’au niveau d’un seul projet. Pour implémenter une logique plus avancée, vous devez implémenter WizardExtension et l’enregistrer dans le fichier .vstemplate de votre modèle.

  AssemblyInGACWithSomeLogic MySuperWizardExtension  

Vous trouverez plus d’informations sur les extensions de l’assistant sur MSDN .

Il est possible, pour savoir comment vous pouvez consulter ce site Web msdn . Ou pour la vue d’ensemble

Vous pouvez le faire en utilisant des assistants de modèles. Je suppose que vous savez déjà comment le mettre en œuvre.

Donc, dans la méthode RunFinished, écrivez ces lignes:

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

Pour la classe Solution2, vous devez référencer EnvDTE80.dll. _dte doit être défini à partir de la méthode RunStarted.

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

J’utilise les extraits suivants dans mon assistant de modèle de projet (voir la réponse 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; } 

_solution = (Solution2) _dte.Solution;