Используйте командлеты командной строки NuGet извне Visual Studio
Я пытался использовать свой любимый элемент управления из консоли Package Manager в Visual Studio 2010. Я столкнулся с проблемами, описанными в другой теме. На данный момент лучший ответ - перенести все средства командной строки из Visual Studio на гору Powershell.
Но этот случай, связанный с командной строкой Visual Studio, не работает. Например, самый важный из них - я не могу запустить команду Update-Database
из Entity Framework.
Возможно ли зарегистрировать какие-то специальные команды Visual Studio для текущего проекта в Powershell? Или заставить Powershell автоматически использовать текущий контекст проекта из подпапки packages
?
Ответы
Ответ 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).
Надеюсь, что это поможет.