しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

PowerShell Core 6.0をデバッグ実行する - Visual Studio 2017編

前回の続き的な。

blog.shibata.tech

前回の時点では「まだVisual Studio 2017でのビルドはうまく動作しない」と説明しましたが、つい最近Visual Studioで動作させるための修正が完了したので実際に試してみました。

github.com

はじめに

基本的なところは前回と同様です。
IDEがVisual Studio CodeからVisual Studio 2017になっただけと考えて差し支えないでしょう。

ただ、詳細は後述しますが、Visual Studioだけでビルドに関するすべての手順を賄えるわけではなく少しだけPowerShellのコマンドを併用する必要があります。

PowerShellをデバッグ実行する

ここから具体的な手順の説明に入ります。

1. Gitのインストール

ソースコードをCloneするのにGitクライアントが必要です。
適当にインストールしてgitコマンドが使える様にしておいてください。

gitforwindows.org

ちなみに、Visual Studioをインストールした後にVisual Studio Installerから「Git for Windows」を選択してインストールしても構いません。

2. ソースのClone

PowerShellのリポジトリよりソースコードをCloneします。

今回はとりあえずデバッグ実行できれば良いので前回同様にリポジトリを直接Cloneしておきます。

任意のディレクトリで以下の様に--recursiveオプションを付けてgit cloneしてください。

git clone --recursive https://github.com/PowerShell/PowerShell.git

3. Visual Studio 2017のインストール

www.visualstudio.com

Visual Studio 2017をダウンロードしてインストールしてください。

私はProfessionalとEneterpriseで動作確認しましたがどのエディションでも大丈夫だと思います。
手元のVisual Studioは結構昔にインストール済みだったので具体的なインストール手順は紹介できませんが、

  • .NETデスクトップ開発 - C#をコンパイルできる標準的な構成
  • .NET Coreクロスプラットフォームの開発 - 要.NET Core SDK

のワークロードがインストールされていれば良いと思います。

なお、PowerShell Coreで必要な.NET Core SDKのバージョンは随時更新されていますので、場合によってはこちらから個別にダウンロードしてインストールする必要があるかもしれません。

本エントリを書いている時点では、PowerShell Core 6.1.0-preview.1をコンパイルするのに.NET Core SDK 2.1.4が必要です。

4. その他ツールのインストール

上記の他に

  • PowerShell 6.0の実行バイナリ(pwsh)
  • RCEdit

が必要になります。

こちらは前回と同様ですので、build.psm1モジュールのStart-PSBootstrap関数を使ってインストールしておけば良いでしょう。

# cd [PowerShellのルートディレクトリ]
cd .\PowerShell\
Import-Module .\build.psm1
Start-PSBootstrap

5. ビルドとデバッグ実行

CloneしたソースのルートディレクトリにPowerShell.slnというソリューションファイルがあるのでVisual Studioからこれを開きます。

f:id:stknohg:20180412001744p:plain

14のプロジェクトから成るソリューションで、Windowsの場合powershell-win-coreプロジェクトのProgram.csにエントリポイントがあります。


この初期状態で単純にソリューションのビルドをしても下図の様に幾つかエラーがでてしまいます。

f:id:stknohg:20180412001839p:plain

これはソースをCloneした直後の状態ではメッセージ等のリソースファイルが存在していないため、リソース不足によるコンパイルエラーとなってしまうためです。

リソースはVisual Studioからは作成できず*1build.psm1モジュールのStart-PSBuild関数を使う必要があります。

次の様にbuild.psm1モジュールをインポートし、-ResGenパラメータを指定してStart-PSBuildを実行してください。

# cd [PowerShellのルートディレクトリ]
cd .\PowerShell\
Import-Module .\build.psm1
Start-PSBuild -ResGen

エラー無く処理が終われば必要なリソースは作成されています。

f:id:stknohg:20180412001923p:plain


リソースが出来ている状態でビルドすればエラー無く完了するはずです。

f:id:stknohg:20180412002020p:plain

デバッグを開始してやれば下図の様にふつうにステップ実行できます。

f:id:stknohg:20180412002047p:plain

最後に

Visual Studio Codeも悪くはありませんがやっぱりVisual Studioの圧倒的な支援は最高です。
ほんとうに捗ります。

*1:もしできる方法があれば教えてください...