Добавление элементов уровня решения в пакет NuGet - PullRequest
32 голосов
/ 24 июня 2011

Я хочу добавить папки решения и элементы решения (не проекты) в файл решения через пакет NuGet.Я предполагаю, что это будет достигнуто через PowershellЯ просмотрел документацию для NuGet, Powershell и EnvDTE и не могу понять:

  1. Какие команды / методы я бы использовал?
  2. Какой стандартный скрипт я бы сделалэто в Init.ps1, Install.ps1 или где-то еще?

1 Ответ

52 голосов
/ 25 июня 2011

Вот сценарий 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)

Чего также не хватает, так это проверки того, существует ли папка решения и элемент папки.Я оставлю это как упражнение для вас.

...