web-dev-qa-db-ja.com

Visual Studioの外部からNuGet PowerShellコマンドレットを使用する

Visual Studio 2010のパッケージマネージャーコンソールからお気に入りのソースコントロールを使用しようとしていました。別の topic で説明されている問題がありました。現時点での最善の答えは、すべてのコマンドラインをVisual Studioから裸のPowerShellに移動することです。

ただし、この場合、Visual Studio関連のコマンドレットは機能しません。たとえば、最も重要なもの— Entity Framework からUpdate-Databaseコマンドを実行できません。

PowerShellで現在のプロジェクトのVisual Studio固有のコマンドレットを何らかの形で登録することは可能ですか?または、PowerShellがpackagesサブフォルダーから現在のプロジェクトコンテキストを自動的に取得するようにしますか?

36
shytikov

NuGet PowerShellコマンドはVisual Studio内から実行されることに依存しているため、コマンドラインから実行される通常のPowerShellでは外部で動作しません。

ただし、EntityFramework NuGetパッケージに付属している migrate.exe を使用し、コマンドラインからそれを使用してデータベースを更新できます。

プロトタイプとして SharpDevelopを使用した通常のPowerShellコマンドラインからのNuGet PowerShellコマンド を使用する方法をまとめました。残念ながら、現時点ではEntityFramework NuGetパッケージはSharpDevelopでは機能しません。

別の興味深いプロジェクトは StudioShell で、これは新しいDTE:Visual Studio内のドライブを提供しますが、コマンドラインから外部で使用することもできます。通常のPowerShellコマンドラインから実行されるNuGet PowerShellコマンドをサポートしているとは思わない。

13
Matt Ward

NuGet.psd1ファイルは次の場所にあります。

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

ただし、ロードしようとすると:

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

私たちは運が悪いと思います。パッケージマネージャーホストから実行する必要があり、Mattが述べたようにVisual Studioからのものが必要です。

私の問題を解決するために、私はChocolateyを使用してNuGet.CommandLineをインストールし、次にNuGet.batを使用して必要なことを行いました。それはもう少し作業であり、あなたがやろうとしていることに応じて、すべてのケースで動作しない場合があります。

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

NuGet.CommandLine:

PS> cinst NuGet.CommandLine
9
petrsnd

Visual Studioのコマンドレットについてはあまり詳しくありませんが、Import-Module -Name <ModuleName>を使用して、PowerShellセッションにモジュールをインポートできます。 「Get-Module -ListAvailable」を使用して、利用可能な(別名「インストール済み」)PowerShellモジュールを一覧表示できます。

私の推測では、Visual Studioコマンドレットには独自のPowerShellモジュールが含まれていますが、$env:PSModulePathの標準の場所の1つに「インストール」されていない可能性があります。この場合、モジュールディレクトリを見つけて、.psd1または.psm1ファイルを直接インポートし、Import-Module -Name <FullPathToModuleFile>に渡す必要があります。

上記の例として、Windows Azure PowerShellモジュールの場所に注意してください。 http://trevorsullivan.net/2012/06/07/introducing-microsofts-official-windows-Azure-powershell-module /

Program Filesディレクトリの下にあり、完全修飾パス(.psd1モジュールマニフェストファイル)からモジュールをインポートしない限り、PowerShellですぐに使用できるわけではありません。

お役に立てれば。

5
Trevor Sullivan