Вот сценарий PowerShell, который создаст папку решения с именем Parent и другую папку решения с именем Child внутри этой папки.Он также добавляет файл проекта (MyProject.csproj) в папку дочернего решения.
# 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)
Здесь используются два основных интерфейса Visual Studio: Solution2 и SolutionFolder .Он также использует функцию Get-Interface, предоставляемую NuGet.
Для пакета только для решения вы должны поместить свой скрипт в init.ps1, потому что install.ps1 вызывается только для проектапакеты на основеInit.ps1 запускается один раз для решения при первой установке пакета и каждый раз, когда решение повторно открывается в Visual Studio.
Чтобы добавить произвольные файлы (не относящиеся к проекту) в папку решения, вам нужно будет сделать что-то похожее на следующее:
$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$vsProject = $vsSolution.AddSolutionFolder("newFolder")
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems])
$projectItems.AddFromFile("pathToFileToAdd.txt")
Чего не хватает в этом скрипте PowerShell - это стандартобъявления параметров в верхней части файла.
param($installPath, $toolsPath, $package, $project)
Чего также не хватает, так это проверки того, существует ли папка решения и элемент папки.Я оставлю это как упражнение для вас.