【问题标题】:Use NuGet PowerShell commandlets from outside Visual Studio从 Visual Studio 外部使用 NuGet PowerShell 命令行开关
【发布时间】:2012-10-14 16:38:55
【问题描述】:

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

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

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

【问题讨论】:

  • 由于对命令行命令的支持有限,我不得不退出使用 nuget。我无法在 Jenkins 中正确使用它。
  • 我也有同样的问题。仍在寻找解决方案。

标签: visual-studio-2010 powershell nuget


【解决方案1】:

我可以在以下位置找到 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.CommandLine:

PS> cinst NuGet.CommandLine

【讨论】:

  • 您可以通过此代码$host.gettype().GetField('nameResult', 'Instance, NonPublic').setValue($host, 'Package Manager Host')更改控制台主机名,但出现更多错误。
【解决方案2】:

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 命令。

【讨论】:

    【解决方案3】:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2019-07-31
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多