Voici un script PowerShell qui va créer une solution de dossier appelé Parent et une autre solution de dossier appelé Enfant à l'intérieur de celui-là. Il ajoute également un fichier de projet (MyProject.csproj) à l'intérieur de l'Enfant, solution de dossier.
# Get the open solution.
$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
# Create the parent solution folder.
$parentProject = $solution.AddSolutionFolder("Parent")
# Create a child solution folder.
$parentSolutionFolder = Get-Interface $parentProject.Object ([EnvDTE80.SolutionFolder])
$childProject = $parentSolutionFolder.AddSolutionFolder("Child")
# Add a file to the child solution folder.
$childSolutionFolder = Get-Interface $childProject.Object ([EnvDTE80.SolutionFolder])
$fileName = "D:\projects\MyProject\MyProject.csproj"
$projectFile = $childSolutionFolder.AddFromFile($fileName)
Les deux principaux Visual Studio interfaces utilisés ici sont Solution2 et SolutionFolder. Il utilise également la fonction d'Interface qui est fournie par NuGet.
Pour une solution de package, vous devez placer votre script init.ps1 parce que installer.ps1 est invoqué pour projet à base de paquets. Init.ps1 s'exécute une fois pour une solution lorsque le package est installé pour la première et à chaque fois que la solution est de ré-ouvert dans Visual Studio.
Pour ajouter des fichiers arbitraires (non-fichiers de projet) à une solution de dossier que vous aurez besoin de faire quelque chose de similaire à la suivante:
$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$vsProject = $vsSolution.AddSolutionFolder("newFolder")
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems])
$projectItems.AddFromFile("pathToFileToAdd.txt")
Ce qui est absent de ce script PowerShell est le standard de déclarations de paramètres en haut de fichier.
param($installPath, $toolsPath, $package, $project)
Ce qui est également absent est de vérifier si le dossier de la solution et de l'élément de dossier existe déjà. Je vais laisser cela comme un exercice à faire pour vous.