从Visual Studio外部使用NuGet PowerShell命令行开关

时间:2012-10-14 16:38:55

标签: visual-studio-2010 powershell nuget

我试图在Visual Studio 2010中使用我最喜欢的源控件来自Package Manager控制台。我遇到了另一个topic中描述的问题。目前,最好的答案是将所有命令行内容从Visual Studio迁移到裸PowerShell。

但是这种情况下Visual Studio相关的命令行开关不起作用。例如,最关键的一个 - 我无法从Entity Framework运行Update-Database命令。

是否可以在PowerShell中以某种方式为当前项目注册Visual Studio特定的命令行开关?或者让PowerShell自动从packages子文件夹中获取当前项目上下文?

3 个答案:

答案 0 :(得分:13)

NuGet PowerShell命令依赖于在Visual Studio中运行,因此无法在从命令行运行的普通PowerShell外部工作。

但是,您可以使用EntityFramework NuGet包附带的migrate.exe,并使用命令行中的{}来更新数据库。

作为原型,我整理了一种使用NuGet PowerShell commands from the normal PowerShell command line using SharpDevelop的方法。不幸的是,目前EntityFramework NuGet包不能与SharpDevelop一起使用。

另一个有趣的项目是StudioShell,它在Visual Studio中提供了一个新的DTE:驱动器,但也可以在命令行之外使用。我不相信它支持从普通的PowerShell命令行运行NuGet PowerShell命令。

答案 1 :(得分:8)

我可以在

找到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

答案 2 :(得分:5)

我对Visual Studio cmdlet并不十分熟悉,但您可以使用Import-Module -Name <ModuleName>将模块导入PowerShell会话。您可以使用`Get-Module -ListAvailable'列出可用的(也称为“已安装”)PowerShell模块。

我的猜测是Visual Studio cmdlet包含在自己的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模块清单文件)导入模块。

希望这有帮助。