如何向 VisualStudio 控制台添加命令?

How to add commands to VisualStudio console?

Entity Framework 和 Nuget 都这样做。他们添加了可以从 visual studio 包管理器控制台启动的 powershell 命令行开关。

如果我可以编写一些 project-centric 实用程序,将其提交到我的源代码管理并可供所有开发人员从该控制台使用,那就太好了。

我该怎么做?

请注意,我不是在寻找第 3 方解决方案(例如 StudioShell),而且我知道我可以编写普通的 powershell 脚本来做很多事情。我特别感兴趣的是如何在 Visual Studio 包管理器控制台中编写 first-class 公民的函数,例如 Get-PackageUpdate-Database.

EntityFramework 的集成是通过 NuGet 完成的,因此您无法真正轻松地将它放入解决方案的项目中。您必须通过 NuGet 包。虽然,您可能可以使用包的本地文件夹使其工作。本质上,EF 在其包的工具文件夹中包含一个普通的 powershell 模块以及一个加载该模块的 init.ps1。其内容:

param($installPath, $toolsPath, $package, $project)

if (Get-Module | ?{ $_.Name -eq 'EntityFramework' })
{
    Remove-Module EntityFramework
}

Import-Module (Join-Path $toolsPath EntityFramework.psd1)
打开解决方案文件时,

init.ps1 被 NuGet/VS 运行。来自 NuGet docs:

Init.ps1 runs the first time a package is installed in a solution.
* If the same package is installed into additional projects in the solution, the script is not run during those installations.
* The script also runs every time the solution is opened (Package Manager Console window has to be open at the same for the script to run). For example, if you install a package, close Visual Studio, and then start Visual Studio and open the solution with Package Manager Console window, the Init.ps1 script runs again.