Подтвердить что ты не робот

Используйте командлеты командной строки NuGet извне Visual Studio

Я пытался использовать свой любимый элемент управления из консоли Package Manager в Visual Studio 2010. Я столкнулся с проблемами, описанными в другой теме. На данный момент лучший ответ - перенести все средства командной строки из Visual Studio на гору Powershell.

Но этот случай, связанный с командной строкой Visual Studio, не работает. Например, самый важный из них - я не могу запустить команду Update-Database из Entity Framework.

Возможно ли зарегистрировать какие-то специальные команды Visual Studio для текущего проекта в Powershell? Или заставить Powershell автоматически использовать текущий контекст проекта из подпапки packages?

4b9b3361

Ответ 1

Команды NuGet PowerShell полагаются на запуск из Visual Studio, поэтому они не будут работать снаружи в обычном PowerShell, запущенном из командной строки.

Однако вы можете использовать migrate.exe, который поставляется с пакетом EntityFramework NuGet, и использовать его из командной строки для обновления вашей базы данных.

В качестве прототипа я собрал способ использовать команды NuGet PowerShell из обычной командной строки PowerShell с помощью SharpDevelop. К сожалению, на данный момент пакет EntityFramework NuGet не работает с SharpDevelop.

Еще один интересный проект - StudioShell, который предоставляет новый DTE-диск внутри Visual Studio, но также может использоваться вне командной строки. Я не верю, что он поддерживает команды NuGet PowerShell, запускаемые из обычной командной строки PowerShell.

Ответ 2

Я могу найти файл 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'.

Я думаю, нам не повезло. Он должен запускаться из Host Manager пакета и требует вещей из Visual Studio, как указано Matt.

Чтобы решить мою проблему, я использовал Chocolatey для установки NuGet.CommandLine, а затем использовал NuGet.bat, чтобы делать то, что мне нужно. Это немного больше работы и может не работать во всех случаях в зависимости от того, что вы пытаетесь сделать.

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

NuGet.CommandLine:

PS> cinst NuGet.CommandLine

Ответ 3

Я не очень хорошо знаком с командлетами Visual Studio, но вы можете импортировать модуль в свой сеанс PowerShell с помощью Import-Module -Name <ModuleName>. Вы можете перечислить доступные (ака. "Установленные" ) модули PowerShell с помощью "Get-Module -ListAvailable".

Я предполагаю, что командлеты Visual Studio содержатся с собственным модулем PowerShell, но вполне возможно, что он не "установлен" в одно из стандартных мест в $env:PSModulePath. Если это так, то вам может понадобиться найти каталог модуля и импортировать непосредственно файл .psd1 или .psm1 и передать его в: Import-Module -Name <FullPathToModuleFile>.

В качестве примера выше, обратите внимание, где находится модуль Windows Azure PowerShell: http://trevorsullivan.net/2012/06/07/introducing-microsofts-official-windows-azure-powershell-module/

Он находится в папке Program Files и не сразу доступен для PowerShell, если вы не импортируете модуль из его полного пути (файл манифеста модуля .psd1).

Надеюсь, что это поможет.