Oto skrypt PowerShell, który utworzy folder rozwiązania o nazwie Parent i inny folder rozwiązania o nazwie Child wewnątrz tego. Dodaje również plik projektu (MyProject.csproj) do folderu rozwiązania Child.
# 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)
Dwa główne interfejsy Visual Studio używane jest tutaj Solution2 i SolutionFolder. Korzysta również z funkcji Get-Interface, którą zapewnia NuGet.
Dla pakietu tylko dla rozwiązań powinieneś umieścić swój skrypt w init.ps1, ponieważ install.ps1 jest wywoływany tylko dla pakietów opartych na projektach. Init.ps1 uruchamia się raz dla rozwiązania, gdy pakiet jest instalowany po raz pierwszy i za każdym razem, gdy rozwiązanie jest ponownie otwierane w Visual Studio.
Aby dodać dowolne pliki (pliki non-Project) do folderu rozwiązanie trzeba będzie zrobić coś podobnego do poniższego:
$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$vsProject = $vsSolution.AddSolutionFolder("newFolder")
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems])
$projectItems.AddFromFile("pathToFileToAdd.txt")
Czego brakuje z tego skryptu PowerShell jest standardowe deklaracje parametr na góra pliku.
param($installPath, $toolsPath, $package, $project)
Brakuje również informacji o tym, czy folder rozwiązania i element folderu już istnieją. Zostawię to jako ćwiczenie dla ciebie.
Dziękuję, właśnie tego szukałem. – brainiac10
jest jakiś sposób debugowania skryptu init? – smnbss
Możesz wypróbować set-psdebug w konsoli NuGet Package Manager. Po prostu próbowałem uruchamiać polecenia w oknie konsoli przeciwko aktywnemu projektowi. Inną alternatywą jest zapisywanie danych wyjściowych w oknie konsoli. –