我试图在Visual Studio 2010中使用我最喜欢的源控件来自Package Manager控制台。我遇到了另一个topic中描述的问题。目前,最好的答案是将所有命令行内容从Visual Studio迁移到裸PowerShell。
但是这种情况下Visual Studio相关的命令行开关不起作用。例如,最关键的一个 - 我无法从Entity Framework运行Update-Database
命令。
是否可以在PowerShell中以某种方式为当前项目注册Visual Studio特定的命令行开关?或者让PowerShell自动从packages
子文件夹中获取当前项目上下文?
答案 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模块清单文件)导入模块。
希望这有帮助。