web-dev-qa-db-fra.com

Utiliser les commandlets NuGet PowerShell depuis l'extérieur de Visual Studio

J'essayais d'utiliser mon contrôle de source préféré à partir de la console du gestionnaire de packages dans Visual Studio 2010. J'ai rencontré des problèmes décrits dans un autre rubrique . Pour l'instant, la meilleure réponse consiste à déplacer tous les éléments de ligne de commande de Visual Studio vers PowerShell nu.

Mais dans ce cas, les commandes associées à Visual Studio ne fonctionnent pas. Par exemple, le plus crucial - je ne peux pas exécuter Update-Database commande de Entity Framework .

Est-il possible d'enregistrer d'une manière ou d'une autre des commandlets spécifiques à Visual Studio pour le projet en cours dans PowerShell? Ou faire en sorte que PowerShell récupère automatiquement le contexte actuel du projet depuis le sous-dossier packages?

36
shytikov

Les commandes NuGet PowerShell reposent sur leur exécution à partir de Visual Studio et ne fonctionneront donc pas à l'extérieur dans PowerShell normal exécuté à partir de la ligne de commande.

Vous pouvez cependant utiliser migrate.exe qui est fourni avec le package EntityFramework NuGet et l'utiliser depuis la ligne de commande pour mettre à jour votre base de données.

En tant que prototype, j'ai mis au point un moyen d'utiliser commandes NuGet PowerShell à partir de la ligne de commande PowerShell normale utilisant SharpDevelop . Malheureusement pour le moment, le package EntityFramework NuGet ne fonctionne pas avec SharpDevelop.

Un autre projet intéressant est StudioShell qui fournit un nouveau lecteur DTE: dans Visual Studio mais peut également être utilisé en dehors de la ligne de commande. Je ne pense pas qu'il prenne en charge les commandes NuGet PowerShell exécutées à partir de la ligne de commande PowerShell normale.

13
Matt Ward

Je peux trouver le fichier NuGet.psd1 à:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\5ttpefif.3mk\Modules\NuGet\NuGet.psd1.

Cependant, lorsque vous essayez de le charger:

PS> Import-Module $pathToNuGetPsd1 -Force -NoClobber -Scope Global
Import-Module : The name of the current Windows PowerShell Host is: 'ConsoleHost'.
The module 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\
Extensions\5ttpefif.3mk\Modules\NuGet\NuGet.psd1' requires the following Windows
PowerShell Host: 'Package Manager Host'.

Je pense que nous n'avons pas de chance. Il doit être exécuté à partir de l'hôte du gestionnaire de packages et nécessite des éléments de Visual Studio comme indiqué par Matt.

Pour résoudre mon problème, j'ai utilisé Chocolatey pour installer NuGet.CommandLine, puis j'ai utilisé NuGet.bat pour faire ce dont j'avais besoin. C'est un peu plus de travail et peut ne pas fonctionner dans tous les cas selon ce que vous essayez de faire.

Chocolaté: https://github.com/chocolatey/chocolatey/wiki/Installation

NuGet.CommandLine:

PS> cinst NuGet.CommandLine
9
petrsnd

Je ne connais pas très bien les applets de commande Visual Studio, mais vous pouvez importer un module dans votre session PowerShell en utilisant Import-Module -Name <ModuleName>. Vous pouvez lister les modules PowerShell disponibles (aka. "Installés") en utilisant `Get-Module -ListAvailable '.

Je suppose que les applets de commande Visual Studio sont contenues avec son propre module PowerShell, mais il est fort possible qu'il ne soit pas "installé" à l'un des emplacements standard dans $env:PSModulePath. Si tel est le cas, vous devrez peut-être localiser le répertoire du module et importer directement le fichier .psd1 ou .psm1 et le transmettre à: Import-Module -Name <FullPathToModuleFile>.

Comme exemple de ce qui précède, notez où se trouve le module Windows Azure PowerShell: http://trevorsullivan.net/2012/06/07/introducing-microsofts-official-windows-Azure-powershell-module /

Il se trouve dans le répertoire Program Files et n'est pas immédiatement disponible pour PowerShell, sauf si vous importez le module à partir de son chemin d'accès complet (le fichier manifeste du module .psd1).

J'espère que cela t'aides.

5
Trevor Sullivan