正しいやり方ではおそらくないです
以下の方法を実行し起こったいかなる問題,損害に対して私は一切の責任を負いません
外部のビルドスクリプトで dotnet コマンドや, mono を参照したり mcs コマンドを実行するライブラリを導入することがあった時,
そのライブラリのビルドはこのバージョンじゃないとエラーになるみたいなことがありました.
そのためどのようにシステムで指し示すバージョンを変えるかを調べてみました.
dotnet の sdk の場合
dotnet の sdk をあるバージョンに固定したり,指定したりする場合はプロジェクトのルートディレクトリに global.json を置いて
{
"sdk": {
"version": "1.0.0-preview2-003121"
}
}
のようにすることでそのプロジェクトで使用するバージョンを固定したりすることができますが,ライブラリ側がそういった対応をしていなければシステムの sdk のバージョンを変えるのが一番手っ取り早いです.
mac ユーザで配布されているインストーラを使用してインストールいているのであれば, /usr/local/share/dotnet/
以下に dotnet 関連のあれこれがインストールされていると思います.
そのディレクトリの sdk というディレクトリを見ると,今までにインストールした各 sdk が以下のような状態で格納されています.
drwxr-xr-x 127 root wheel 4.2K 1 25 12:06 1.0.0-rc4-004616
drwxr-xr-x 50 root wheel 1.7K 6 22 2016 1.0.0-preview2-003121
drwxr-xr-x 50 root wheel 1.7K 10 18 06:04 1.0.0-preview2-003148
drwxr-xr-x 50 root wheel 1.7K 12 1 07:14 1.0.0-preview2-003156
drwxr-xr-x 51 root wheel 1.7K 11 11 10:09 1.0.0-preview2-1-003177
この状態で dotnet のバージョンなどを調べるために dotnet --info
を実行してみると
.NET Command Line Tools (1.0.0-rc4-004616)
Product Information:
Version: 1.0.0-rc4-004616
Commit SHA-1 hash: 56d8071361
Runtime Environment:
OS Name: Mac OS X
OS Version: 10.11
OS Platform: Darwin
RID: osx.10.11-x64
Base Path: /usr/local/share/dotnet/sdk/1.0.0-rc4-004616
最新の 1.0.0-rc4-004616 が読まれているようです.
この最新バージョンをどのようにして取得しているのかはまだ調べていませんが,このバージョンは先頭に何かしら文字列を加えてしまえば無効なものとみなされ無視されることがわかりました.
そのため少し前のバージョンである 1.0.0-preview2-1-003177 を使いたいという場合は,それよりもバージョンが上である 1.0.0-rc4-004616 をリネームしてしまえばいいのです.
私は 1.0.0-rc4-004616 -> _1.0.0-rc4-004616
のように,先頭にアンダースコアを入れる形で対策しています.
この状態で dotnet --info
を実行すると
.NET Command Line Tools (1.0.0-preview2-1-003177)
Product Information:
Version: 1.0.0-preview2-1-003177
Commit SHA-1 hash: a2df9c2576
Runtime Environment:
OS Name: Mac OS X
OS Version: 10.11
OS Platform: Darwin
RID: osx.10.11-x64
と目的のものに変えることができました.
ですが,さらに古いバージョンにしたいとなるといくつも上のバージョンをリネームする必要があって非常に面倒です.
というわけで簡単な変更スクリプトを書いたのでこれを使えばいいんじゃないかなと思います.
https://gist.github.com/yamachu/3cce558ee49e40a8c8ff7fd7da2793c7
要Python3.6 以上なのですが,3.6で導入された f'1 + 1 = {1+1}'
みたいなフォーマット指定のものに使っているだけなので, そこを書き換えてPython3.5 以上であれば動作すると思います.
mono のバージョンに関して
以前 Visual Studio for Macをインストールしてmono4.8+が無いと怒られた時の対処法という記事で使った対処法と同じで,
/Library/Frameworks/Mono.framework/Versions/Current
の指す先を変えてしまえばひとまずは問題なさそうだったので,この方法を採用しています.
[追記]
本当の正しいやり方はこれのようです
Parallel Mono Environments
これも面倒だったので上記と同じようなスクリプトにしました.
https://gist.github.com/yamachu/faec9bbe5bbe21ab814f1ad59e8cbb84
最後に
正しいやり方があれば教えていただけると幸いです.