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

shy*_*kov 36 powershell visual-studio-2010 nuget

我试图在Visual Studio 2010中使用Package Manager控制台中我最喜欢的源代码控件.我遇到了另一个主题中描述的问题.现在最好的答案是将所有命令行内容从Visual Studio移到裸机Powershell.

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

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

Mat*_*ard 13

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

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

作为原型,我整理了一种使用SharpDevelop从普通PowerShell命令行使用NuGet PowerShell命令的方法.不幸的是,目前EntityFramework NuGet包不能与SharpDevelop一起使用.

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


pet*_*snd 9

我可以在以下位置找到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'.
Run Code Online (Sandbox Code Playgroud)

我想我们运气不好.它必须从程序包管理器主机运行,并且需要Matt所述的Visual Studio中的内容.

为了解决我的问题,我使用Chocolatey来安装NuGet.CommandLine,然后使用NuGet.bat来完成我需要的工作.这是一项更多的工作,可能无法在所有情况下工作,具体取决于您正在尝试做什么.

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

NuGet.CommandLine:

PS> cinst NuGet.CommandLine
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过以下代码更改控制台主机名:$ host.gettype().GetField('nameResult','Instance,NonPublic').setValue($ host,'Package Manager Host')`,但是还有一些错误. (2认同)

Tre*_*van 5

我对Visual Studio cmdlet并不十分熟悉,但您可以使用将模块导入PowerShell会话Import-Module -Name <ModuleName>.您可以使用`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模块清单文件)导入模块.

希望这可以帮助.