2012-10-14 20 views
31

Stavo cercando di utilizzare il mio controllo sorgente preferito dalla console di Package Manager in Visual Studio 2010. Ho riscontrato problemi descritti in un altro topic. Per ora la migliore risposta è spostare tutte le cose da linea di comando da Visual Studio a Powershell.Utilizzare i comandi di NuGet PowerShell dall'esterno di Visual Studio

Ma questo caso di comandi relativi a Visual Studio non funziona. Ad esempio, il più importante: non è possibile eseguire il comando Update-Database da Entity Framework.

È possibile registrare in qualche modo le istruzioni di comando specifiche di Visual Studio per il progetto corrente in PowerShell? Oppure fare in modo che Powershell assuma automaticamente il contesto del progetto corrente dalla sottocartella packages?

+5

ho dovuto smettere di usare NuGet a causa della sua limitata sostegno dei comandi a riga di comando. Non posso usarlo correttamente in Jenkins. – Rafa

+0

Ho lo stesso problema. Ancora in fuga per una soluzione. – Callan

risposta

4

Non ho molta familiarità con i cmdlet di Visual Studio, ma è possibile importare un modulo nella sessione di PowerShell utilizzando Import-Module -Name <ModuleName>. È possibile elencare i moduli PowerShell disponibili (cioè "installati") utilizzando `Get-Module -ListAvailable '.

La mia ipotesi sarebbe che i cmdlet di Visual Studio siano contenuti con il proprio modulo PowerShell, ma è possibile che non sia "installato" in una delle posizioni standard in $env:PSModulePath. In tal caso, potrebbe essere necessario individuare la directory del modulo e importare direttamente il file .psd1 o .psm1 e inoltrarlo in: Import-Module -Name <FullPathToModuleFile>.

Come esempio di quanto sopra, prendere atto di dove si trova il modulo di Windows Azure PowerShell: http://trevorsullivan.net/2012/06/07/introducing-microsofts-official-windows-azure-powershell-module/

E 'sotto la directory Program Files, e non è immediatamente disponibile per PowerShell, a meno che non si importa il modulo dalla sua percorso completo (il file manifest del modulo .psd1).

Spero che questo aiuti.

9

I comandi di NuGet PowerShell si basano sull'esecuzione da Visual Studio, pertanto non funzioneranno al di fuori del normale PowerShell in esecuzione dalla riga di comando.

È tuttavia possibile utilizzare migrate.exe fornito con il pacchetto NuGet di EntityFramework e utilizzarlo dalla riga di comando per aggiornare il database.

Come prototipo ho messo insieme un modo per utilizzare NuGet PowerShell commands from the normal PowerShell command line using SharpDevelop. Sfortunatamente al momento il pacchetto NuGet di EntityFramework non funziona con SharpDevelop.

Un altro progetto interessante è StudioShell che fornisce un nuovo DTE: unità in Visual Studio ma può anche essere utilizzato all'esterno dalla riga di comando. Non credo che supporti i comandi di NuGet PowerShell eseguiti dalla normale riga di comando di PowerShell.

6

posso trovare il file NuGet.psd1 a:

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

Tuttavia, quando si tenta di caricarlo:

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

penso che siamo fuori di fortuna. Deve essere eseguito dall'host Package Manager e richiede elementi da Visual Studio, come indicato da Matt.

Per risolvere il mio problema ho usato Chocolatey per installare NuGet.CommandLine e quindi ho utilizzato NuGet.bat per fare ciò di cui avevo bisogno.È un po 'più di lavoro e potrebbe non funzionare in tutti i casi a seconda di cosa stai cercando di fare.

Chocolatey: https://github.com/chocolatey/chocolatey/wiki/Installation

NuGet.CommandLine:

PS> cinst NuGet.CommandLine 
+2

È possibile modificare il nome host della console con questo codice '$ host.gettype(). GetField ('nameResult', 'Instance, NonPublic'). SetValue ($ host, 'Gestore pacchetti host')', ma poi c'è dell'altro errori. – mtman

Problemi correlati