もんりぃ is undefined.

育児ネタとか、技術ネタとか。

.NET SDK を入れても dotnet コマンドにパスが通らない問題

前置き

  • 久しぶりの技術ネタ。
  • Visual Studio Code で .cs なファイルを開いたところ The .NET CLI tools cannot be located. .NET Core debugging will not be enabled. Make sure .NET CLI tools are installed and are on the path. というエラーが出続けて困っていた。
  • 普段は JetBrains Rider を使っているので良いっちゃ良いんだが、毎回エラーが出るのもアレなので、一念発起して調べてみて、解決策を見つけたのでその辺について綴る。

現象

  • .NET SDK が入っており C# 用拡張が入っている状態でも、Visual Studio Code がエラーを吐く。

環境

原因

  • #1259|Dotnet is not found under default PATH に答えがあった。
  • zsh はデフォルトだと /usr/libexec/path_helper を呼び出してくれないらしく、 /usr/local/share/dotnet/dotnet にインストールされる dotnet コマンドへのパスが通らない。
  • そのため、Visual Studio Code からも dotnet コマンドが見つけられず、「.NET CLI 入ってないっぽいよ?」ってエラーが出力される。
    • 勿論、ターミナルから which dotnet とかやっても、dotnet not found とか言われる。

解決策

其の壱

  • .zshrc 辺りに以下のシェルを追記する。
PATH="${PATH}:/usr/local/share/dotnet"
  • シンプルに dotnet コマンドがあるディレクトリへのパスを追加するだけ。
  • 影響範囲を極小に出来る。

其の弐

  • .zshrc 辺りに以下のシェルを追記する。
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi
  • /etc/paths.d/ 以下にあるファイル内に書かれているディレクトリを $PATH に追加してくれるコマンド(らしい)。
    • おまけとして $MANPATH 変数が宣言されているなら /etc/manpaths.d を走査して追加してくれるんだとか。
  • で、 /etc/paths.d/dotnet/usr/local/share/dotnet と書かれているので、結果として dotnet コマンドへのパスが通るというカラクリ。
  • 私はこちらを採択しました。

所感

  • 環境周りは色々とハマりますね…。
  • なお、今回の件とは関係ありませんが、 rcm というライブラリを使った dotfiles (.zshrc とかの設定ファイル)管理が便利です。