.net - visual - nuget update package
Agregar elementos de nivel de solución en un paquete NuGet (1)
Quiero agregar carpetas de solución y elementos de solución (no proyectos) a un archivo de solución a través de un paquete NuGet. Me imagino que esto se logrará a través de Powershell. He revisado la documentación de NuGet, Powershell y EnvDTE y no puedo entender:
- ¿Qué comandos / métodos usaría?
- ¿En qué script estándar haría esto en Init.ps1, Install.ps1 o en otro lugar?
Aquí hay un script de PowerShell que creará una carpeta de solución llamada Parent y otra carpeta de solución llamada Child dentro de esa. También agrega un archivo de proyecto (MyProject.csproj) dentro de la carpeta de la solución 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)
Las dos interfaces principales de Visual Studio que se utilizan aquí son Solution2 y SolutionFolder . También utiliza la función Get-Interface que proporciona NuGet.
Para un paquete de solo solución, debe colocar su script en init.ps1 porque install.ps1 solo se invoca para paquetes basados en proyectos. Init.ps1 se ejecuta una vez para una solución cuando el paquete se instala por primera vez y cada vez que se vuelve a abrir la solución en Visual Studio.
Para agregar archivos arbitrarios (archivos que no sean de proyecto) a una carpeta de solución, deberá hacer algo similar a lo siguiente:
$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$vsProject = $vsSolution.AddSolutionFolder("newFolder")
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems])
$projectItems.AddFromFile("pathToFileToAdd.txt")
Lo que falta en este script de PowerShell son las declaraciones de parámetros estándar en la parte superior del archivo.
param($installPath, $toolsPath, $package, $project)
Lo que también falta es verificar si la carpeta de solución y el elemento de carpeta ya existen. Lo dejaré como un ejercicio para que hagas.