PowerShell Cmdlet のバイナリモジュールを作ったことがある方はわかるとおもうのですが、バイナリモジュールを実際にPowerShellで実行して動作を確認するためには、ビルドしたdllをImport-Module
で読みこむ必要があります*1。さらに、一度 Import-Module
すると、そのPowerShell ConsoleなりISEのプロセスが dll をファイルロックするため、一度 Consoleを閉じないと、リビルドできません*2。
そのため、バイナリモジュールをデバッグするときは、ビルドする、PowerShell Console開く、Import-Moduleする、デバッグする。Console閉じる、という流れを繰り返す必要があります。これはめんどい!っていうのを前から思っていたのですが、ようやくVisual Studio拡張として作成しました。
作成したCmdletを継承した自分のクラスを開いたエディタを右クリックすると、「Open for PSCmdlet」というメニューが出るのでクリックします。
すると、そのクラスが含まれるプロジェクトをアクティブなビルド構成でビルドした後で、PowerShell Consoleを開き、プロジェクトのビルド成果物である dllをImport-Moduleしてくれます(Import-Moduleしたコマンドは表示されませんが、実際にImportされています)。こんな風に、デフォルトとは異なるアセンブリ名や出力先フォルダを指定していても、
この設定を読み取って、dll を Importしてくれます。
現在リリースしている最新のバージョンはこの機能だけになります。
コードはGitHubで公開しているので、バグ報告や機能要望もこちらにお願いします。
処理は、OpenForPSCmdletPackage.cs
で完結しているのでここを読んでもらえると、Visual Studio拡張の中でビルドする方法や、csproj の設定を読む方法などがわかると思います。