前回の続き的な。
前回の時点では「まだVisual Studio 2017でのビルドはうまく動作しない」と説明しましたが、つい最近Visual Studioで動作させるための修正が完了したので実際に試してみました。
はじめに
基本的なところは前回と同様です。
IDEがVisual Studio CodeからVisual Studio 2017になっただけと考えて差し支えないでしょう。
ただ、詳細は後述しますが、Visual Studioだけでビルドに関するすべての手順を賄えるわけではなく少しだけPowerShellのコマンドを併用する必要があります。
PowerShellをデバッグ実行する
ここから具体的な手順の説明に入ります。
1. Gitのインストール
ソースコードをCloneするのにGitクライアントが必要です。
適当にインストールしてgit
コマンドが使える様にしておいてください。
ちなみに、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のインストール
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からこれを開きます。
14のプロジェクトから成るソリューションで、Windowsの場合powershell-win-core
プロジェクトのProgram.cs
にエントリポイントがあります。
この初期状態で単純にソリューションのビルドをしても下図の様に幾つかエラーがでてしまいます。
これはソースをCloneした直後の状態ではメッセージ等のリソースファイルが存在していないため、リソース不足によるコンパイルエラーとなってしまうためです。
リソースはVisual Studioからは作成できず*1build.psm1
モジュールのStart-PSBuild
関数を使う必要があります。
次の様にbuild.psm1
モジュールをインポートし、-ResGen
パラメータを指定してStart-PSBuild
を実行してください。
# cd [PowerShellのルートディレクトリ] cd .\PowerShell\ Import-Module .\build.psm1 Start-PSBuild -ResGen
エラー無く処理が終われば必要なリソースは作成されています。
リソースが出来ている状態でビルドすればエラー無く完了するはずです。
デバッグを開始してやれば下図の様にふつうにステップ実行できます。
最後に
Visual Studio Codeも悪くはありませんがやっぱりVisual Studioの圧倒的な支援は最高です。
ほんとうに捗ります。
*1:もしできる方法があれば教えてください...