27 votes

Ajout d'éléments au niveau de la solution dans un package NuGet

Je souhaite ajouter des dossiers de solution et des éléments de solution (pas des projets) à un fichier de solution via un package NuGet. J'imagine que cela serait accompli par Powershell. J'ai parcouru la documentation de NuGet, Powershell et EnvDTE et je n'arrive pas à comprendre:

  1. Quelles commandes / méthodes utiliserais-je?
  2. Dans quel script standard je ferais cela, Init.ps1, Install.ps1, ou ailleurs?

46voto

Matt Ward Points 7456

Voici un script PowerShell qui va créer une solution de dossier appelé Parent et une autre solution de dossier appelé Enfant à l'intérieur de celui-là. Il ajoute également un fichier de projet (MyProject.csproj) à l'intérieur de l'Enfant, solution de dossier.

# 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)

Les deux principaux Visual Studio interfaces utilisés ici sont Solution2 et SolutionFolder. Il utilise également la fonction d'Interface qui est fournie par NuGet.

Pour une solution de package, vous devez placer votre script init.ps1 parce que installer.ps1 est invoqué pour projet à base de paquets. Init.ps1 s'exécute une fois pour une solution lorsque le package est installé pour la première et à chaque fois que la solution est de ré-ouvert dans Visual Studio.

Pour ajouter des fichiers arbitraires (non-fichiers de projet) à une solution de dossier que vous aurez besoin de faire quelque chose de similaire à la suivante:

$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$vsProject = $vsSolution.AddSolutionFolder("newFolder")
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems])
$projectItems.AddFromFile("pathToFileToAdd.txt")

Ce qui est absent de ce script PowerShell est le standard de déclarations de paramètres en haut de fichier.

param($installPath, $toolsPath, $package, $project)

Ce qui est également absent est de vérifier si le dossier de la solution et de l'élément de dossier existe déjà. Je vais laisser cela comme un exercice à faire pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X