36

我试图在 Visual Studio 2010 的包管理器控制台中使用我最喜欢的源代码控制。我遇到了另一个主题中描述的问题。目前最好的答案是将所有命令行内容从 Visual Studio 移动到裸 PowerShell。

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

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

4

3 回答 3

13

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

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

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

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

于 2012-10-15T06:57:55.413 回答
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'.

我认为我们不走运。它必须从包管理器主机运行,并且需要来自 Visual Studio 的东西,如 Matt 所述。

为了解决我的问题,我使用 Chocolatey 安装 NuGet.CommandLine,然后使用 NuGet.bat 来完成我需要的操作。它需要做更多的工作,并且可能并非在所有情况下都有效,具体取决于您要执行的操作。

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

NuGet.命令行:

PS> cinst NuGet.CommandLine
于 2014-03-07T17:30:10.843 回答
4

我对 Visual Studio cmdlet 不是很熟悉,但您可以使用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 模块清单文件)导入模块。

希望这可以帮助。

于 2012-10-14T18:12:54.560 回答