omnisharp-vim で .NET Framework 4.7.1 が見つからないとか言われる時の対処法

なんか毎回アップデートする度に悩んでる気がするので備忘録。

4.7.1 というバージョンは任意。
Windows だと Visual Studio とかでよしなに。

OSX の場合。

ここでは「最新の mono を入れろ」とか 「.NET Core を入れろ」と言われてますが、半分正解。ちょっと足りない。

omnisharp-vim でサーバを起動する際、 OmniSharpInstall コマンドでダウンロードした omnisharp-roslyn を使うのだが、これそのまま使うと omnisharp-roslyn に同梱されている mono コマンドを使うようになる。この mono から .NET Framework 4.7.1 が見つからないのが問題なので、これをなんとかしてやる。

具体的には

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env bash

base_dir="$(cd "$(dirname "$0")" && pwd -P)"
bin_dir=${base_dir}/bin
etc_dir=${base_dir}/etc
omnisharp_dir=${base_dir}/omnisharp

#mono_cmd=${bin_dir}/mono
mono_cmd=/Library/Frameworks/Mono.framework/Versions/Current/bin/mono
omnisharp_cmd=${omnisharp_dir}/OmniSharp.exe
config_file=${etc_dir}/config

chmod 755 ${mono_cmd}

no_omnisharp=false

if [ "$1" = "--no-omnisharp" ]; then
shift
no_omnisharp=true
fi

export MONO_CFG_DIR=${etc_dir}
export MONO_ENV_OPTIONS="--assembly-loader=strict --config ${config_file}"

if [ "$no_omnisharp" = true ]; then
"${mono_cmd}" "$@"
else
"${mono_cmd}" "${omnisharp_cmd}" "$@"
fi

サーバ起動に使われるスクリプト ~/.cache/omnisharp-vim/omnisharp-roslyn/run を書き換えて、同梱の mono ではなく、別途インストールした mono を使うように修正するだけ。 [1]

omnisharp-roslyn の方で、パスで優先されている mono を使うようになってくれればいいんだが、まあ、このくらいで動くなら安いものか。


  1. 8行目 ↩︎