Visual Studio Codeで.NET Coreアプリをデバッグする
Visual Studio Codeのリリース当初、普段 仕事でフルセットの Visual Studio 2015 を使っている身としてあまり関心を持っていなかったのですが、使ってみたらなんだか結構いけてる気がしてきました。
VS2015ほど、裏でいろいろお世話してくれることもないので、「.NET Core」であったり「Angular2+TypeScript」の最新版であったりを使う場合には問題が発生しにくく、使い勝手がいいんじゃないかと思っています。
ということで、「.NET Core / .NET CLI 1.0.0-preview2-0031119」「Visual Studio Code 1.2.1」という環境で.NET Coreアプリをブレークポイント付きでデバッグするところまで見ていこうと思います。
ちなみにVisual Studio Codeが非常に親切で、あえてブログ記事にする必要がないかと思う程簡単に出来てしまいます。
.NET CoreランタイムとCLIをインストールする
以下のgithubから「.NET Core SDK Installer」をダウンロードしてインストールを行います。
※デイリービルドされているので、バージョンは毎日違います。
Visual Studio Codeをインストールする
以下のサイトからVisual Studio Codeをダウンロードしてインストールを行います。
https://www.visualstudio.com/ja-jp/products/code-vs.aspx
Visual Studio CodeにC# Extensionをインストールする
Visual Studio CodeでC#プログラムをデバッグするためにエクステンションをインストールします。
「CTRL+P」でパレットを表示して以下のコマンドを実行します。
ext install csharp
Visual Studio Codeの再起動が求められるので、再起動します。
.NET Coreアプリを作成する
では、コマンドプロンプトを開き.NET Coreアプリを作成しましょう。アプリケーションフォルダは「c:\Projects\example」とします。
まずdotnetコマンドが正常に動作することを確認します。以下のコマンドでバージョン情報を確認しましょう。
dotnet -version
次にアプリケーションの作成を行います。
dotnet new
HelloWorldアプリケーションが自動生成されました。
依存関連モジュール等の取得を行います。
dotnet restore
フォルダ構成はこんな感じになります。
そのまま実行してみましょう。
dotnet run
「Hello World!」の出力を確認することができます。
Visual Studio Codeで実行する
コマンドラインベースで作成・実行したアプリをVisual Studio Codeで実行・デバッグしたいと思います。
Visual Studio Codeを起動し「ファイル→フォルダーを開く」を選択します。
c:\Projects\exsmpleフォルダを選択します。
親切なことに、「Required assets to build and debug are missing from your project. Add them?」(君のプロジェクトにはビルド・デバッグに必要なファイルがないよ。追加する?)と聞いてきてくれます。もちろん「Yes」と答えましょう(以下の画面)。
以下の画面にあるように「.vscodeフォルダ」およびその配下に「launch.json」「tasks.json」ファイルが追加されます。
launch.jsonはVS Codeがアプリケーションをどのように起動するかの構成。tasks.jsonはいわゆるタスクランナーの設定、C#コードをビルドして、TypeScriptをコンパイルして、JSをMinifyして・・・とかいう構成です。
自動生成されたlaunch.json / tasks.jsonはすでに.NET Coreアプリとしてビルド実行する構成がいい感じに設定されています。
次にProgram.csにブレークポイントを付けて(対象行でF9)、左のペインから虫のマークの「デバッグ」を選択してデバッグ実行(F5)を行います。
↓↓↓止まりました!↓↓↓
ちなみにソースコード少し書き換えて、変数を使用し、その変数の値をウォッチしたのが以下の画面です。
素晴らしく簡単に.NET Coreアプリのデバッグ環境が整いました!
※昔Eclipse & Pythonのデバッグ環境構築に苦労したことを思い出しましたが、あれは自分の知識不足だったのであろうか・・・