vs2013 visual update studio microsoft manager instalar abrir .net powershell nuget envdte

.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:

  1. ¿Qué comandos / métodos usaría?
  2. ¿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.