ちょっと前に .NET Core のバージョンがよくわからないという話題が Twitter で上がりました。
何のVersionを表示しているのか?有識者に聞かないと良くわからん。 pic.twitter.com/1gqVqpASxP
— Takekazu Omi (@takekazuomi) 2017年3月8日
@shibayan 全然わかんない。 https://t.co/d9eSBBieMV からダウンロードできるやつ、インストーラー的には 1.1.1 になってるけど実行してみたら 1.0.1 って表示されるし。dotnet --versionしても 1.0.1 だし…
— ++C++; // 管理人: 岩永 (@ufcpp) 2017年3月13日
おーみさんとにぃにが分からないのなら、みんなわからないのではという感があるのと、自分も正直よくわからなかったので理解を兼ねて調べました。バージョニング失敗してるとしか思えない。
ダウンロードページでは SDK と Runtime で分かれています。SDK は .NET Core 1.0 と 1.1 を含んでいることが分かるのですが、ダウンロードしたファイルには 1.0.1 とあります。
Linux 版の .NET Core は 1.0.4 と 1.1.1 でダウンロードリンクは分かれていますが、Ubuntu と RHEL では 10 だったり 1.0.1 だったりと混乱しそうなバージョンになってます。
流石にこれは混乱するので、いいタイミングだと思ったので調べました。分かったことは我々が .NET Core と呼んでいるものは、実際は 3 つに分かれているということでした。
現時点でのコンポーネントとバージョンを適当に挙げます。
- .NET Core Shared Framework Host
- 1.1.0
- .NET Core SDK
- 1.0.1
- .NET Core Runtime
- 1.0.4 (LTS) / 1.1.1 (Current)
この中で意識しておかないといけないのは、多分 SDK と Runtime のバージョンです。
.NET Core Shared Framework Host は dotnet.exe 自体を指しているようです。この時点で分かりにくい。
そして dotnet にオプションを付けて呼び出すと .NET Command Line Tools が呼び出されるようです。しかし dotnet をオプション無しで実行した時の説明が多分間違っている。
Common Options: --help Display .NET Core Shared Framework Host help. --version Display .NET Core Shared Framework Host version.
.NET Core Shared Framework Host のバージョンと書いてあるのに、実際には 1.0.1 が表示されるので SDK のバージョンを表示しているようです。かなり混乱してきます。
確実な方法は --info を付けて呼び出すことです。詳細な情報が表示されます。
SDK という呼び方が分かりにくさを加速させている感じがしますが、実体は .NET CLI でした。
インストールディレクトリを見ると、ちゃんと host / sdk / shared と分かれています。
SDK の 1.0.0 はどこに行ったのかは、多分疑問に思ってはいけないやつです。
また shared って何だという感じがしてきますが、ここに .NET Core のランタイムが入っています。バージョン番号も見慣れたものですね。
dotnet.exe のオプションに --fx-version というのがあるので 1.0.4 と指定すれば、そのバージョンで実行できるのかもしれないです。しかし殆どの場合は project.json や csproj で指定するので使う場面があるのかは謎。
ちなみに Docker Image はランタイムのバージョンで統一されているので迷うことはないです。
https://hub.docker.com/r/microsoft/dotnet/
.NET Core 1.1.1 が使いたい場合は 1.1.1-runtime / 1.1.1-sdk などのタグを選ぶだけです。
個人的には結局のところ、常に最新版を入れておけば何とかなるだろうという結論に達しました。CoreFX のバージョンを入れるともっとやばいことになるのですが、そういうことはにぃにに任せたいと思いました。