読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

.NET Core のバージョンが難しい

C#

ちょっと前に .NET Core のバージョンがよくわからないという話題が Twitter で上がりました。

おーみさんとにぃにが分からないのなら、みんなわからないのではという感があるのと、自分も正直よくわからなかったので理解を兼ねて調べました。バージョニング失敗してるとしか思えない。

ダウンロードページでは SDK と Runtime で分かれています。SDK は .NET Core 1.0 と 1.1 を含んでいることが分かるのですが、ダウンロードしたファイルには 1.0.1 とあります。

.NET Core Downloads

f:id:shiba-yan:20170314004228p:plain

Linux 版の .NET Core は 1.0.4 と 1.1.1 でダウンロードリンクは分かれていますが、Ubuntu と RHEL では 10 だったり 1.0.1 だったりと混乱しそうなバージョンになってます。

.NET Core downloads - Linux

f:id:shiba-yan:20170314004358p:plain

流石にこれは混乱するので、いいタイミングだと思ったので調べました。分かったことは我々が .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 自体を指しているようです。この時点で分かりにくい。

f:id:shiba-yan:20170314004546p:plain

そして 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 を付けて呼び出すことです。詳細な情報が表示されます。

f:id:shiba-yan:20170314004459p:plain

SDK という呼び方が分かりにくさを加速させている感じがしますが、実体は .NET CLI でした。

インストールディレクトリを見ると、ちゃんと host / sdk / shared と分かれています。

f:id:shiba-yan:20170314004737p:plain

SDK の 1.0.0 はどこに行ったのかは、多分疑問に思ってはいけないやつです。

また shared って何だという感じがしてきますが、ここに .NET Core のランタイムが入っています。バージョン番号も見慣れたものですね。

f:id:shiba-yan:20170314004815p:plain

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 のバージョンを入れるともっとやばいことになるのですが、そういうことはにぃにに任せたいと思いました。