銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Visual Studio Code の C# Debugging を .NET Core on RHEL でやってみる

できるようになったという記事を見たので試してみました。

stufftoddknows.com

せっかくなので動作確認した手順をまとめておきました。

Visual Studio Codeのセットアップ

4/22現在の最新版、Insider版の両方で動作確認できました。RHELなので、64bit rpm 版をダウンロードしてインストールします。確認したバージョンは1.0.0もしくは1.0.0-insiderです。

$ sudo yum install vscode-x86_64.rpm

.NET Core のインストール

こちらの記事でどうぞ。あと、リンク先は時々更新されているので適宜dotnetフォルダを削除してダウンロード・展開しなおすといいかもしれません。

tech.tanaka733.net

動作確認したときのバージョン

$ dotnet --help
.NET Command Line Tools (1.0.0-rc2-002476)

C# Extension のインストール

$ wget https://github.com/OmniSharp/omnisharp-vscode/releases/download/v1.0.3-rc2/csharp-1.0.3-rc2.vsix

してダウンロードしたファイルをVisual Studio Codeで開いて拡張をインストールします。

この後、csファイルを開くとDebuggerが自動でダウンロードされるのですが、NuGet.configにmygetのリポジトリを追加しておかないと追加ライブラリが参照できないことがあるので次の手順でNuGet.configまで作成後、作成されたProgram.csを開くとよさそうです*1

$ dotnet new
$ vi NuGet.config

NuGet.configの中身

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!--To inherit the global NuGet package sources remove the <clear/> line below -->
    <clear />
    <add key="dotnet-core" value="https://www.myget.org/F/dotnet-core/api/v3/index.json" />
    <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

NuGet.configはCase Sensitiveです。うまくいかないときは dotnet restoreコマンド実行後にどのNuget.configを参照したかが表示されるのでそこで確認しましょう。

log  : Restore completed in 13518ms.

NuGet Config files used:
    /home/tanaka733/src/notification/NuGet.config
    /home/tanaka733/.nuget/NuGet/NuGet.Config

Feeds used:
    https://www.myget.org/F/dotnet-core/api/v3/index.json
    https://api.nuget.org/v3/index.json

C# Debugging を動かしてみる

ここまでやって、Program.csを開けばC# Debuggingが自動で動き出すはずです。適当に入力しようとすると、IntelliSenseが動きます。

f:id:tanaka733:20160424232347g:plain

デバッグを開始して、ブレークポイントも置けます。コンパイルとかデバッガが止まってから変数が表示されるようになるまではやっぱり遅いかな...

f:id:tanaka733:20160424233557g:plain

初めて、Visual Studio CodeでC# Debuggingを使ってみたのですが、正直ここまでできるとは思っていませんでした。実戦的なアプリを作るとまた印象が変わるかもしれませんが*2、最初の印象としてはよいです。

*1:以前の記事ではグローバルのNuget.configにmygetを追加しましたが、この方法だとソリューション単位の設定になります。お好きな方で。

*2:それについては.NET CoreがまだRC2にもなっていないのでまだ慌てる時間じゃない