2012-10-14 69 views
31

我试图从Visual Studio 2010中的Package Manager控制台使用我最喜欢的源代码控制。我遇到了另一个topic中描述的问题。现在最好的答案是将所有命令行内容从Visual Studio移动到纯粹的Powershell。从Visual Studio外部使用NuGet powershell命令行开关

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

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

+5

我不得不使用的NuGet退出由于其有限的支持的命令行命令。我不能在Jenkins中正确使用它。 – Rafa

+0

我有同样的问题。仍然渴望解决方案。 – Callan

回答

4

我对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模块清单文件)。

希望这会有所帮助。

9

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

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

作为一个原型,我把一个使用方法NuGet PowerShell commands from the normal PowerShell command line using SharpDevelop。不幸的是,目前EntityFramework NuGet包与SharpDevelop不兼容。

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

6

我可以找到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提供的东西。

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

的巧克力:https://github.com/chocolatey/chocolatey/wiki/Installation

NuGet.CommandLine:

PS> cinst NuGet.CommandLine 
+2

您可以通过以下代码更改控制台主机名:$ host.gettype()。GetField('nameResult','Instance,NonPublic')。setValue($ host,'Package Manager Host')',但是还有更多错误。 – mtman

相关问题