これは、なにをしたくて書いたもの?
Ubuntu Linuxに、.NET Coreをインストールしてみようかなと。
.NET Core
.NET自体の説明は、こちら。
そして、.NET Coreについて。
2014 年に、Microsoft によって、.NET Framework のクロスプラットフォームのオープンソースの後継版の作成が開始されました。 この .NET の新しい実装には、バージョン 3.1 に達するまで .NET Core という名前が付けられていました。 .NET Core 3.1 以降の次のバージョンは .NET 5.0 であり、現在プレビュー段階です。
.NET Coreというのは、バージョン3.1までの名前ですが、クロスプラットフォームのオープンソース実装のことを指すようです。
.NET 5以降は、"Core"とは呼ばなくなるようですね。
で、.NET 5はプレビュー段階と上記のページに書いていますが、実際には2020年11月にリリースされているようなので…。
Announcing .NET 5.0 | .NET Blog
[速報]マイクロソフト「.NET 5」正式リリース。1つのフレームワークでWindows/Mac/Linuxのデスクトップ、サーバアプリ、Webアプリなどが開発可能に - Publickey
今回は、.NET 5.0と.NET Core 3.1をインストールしてみたいと思います。
環境
今回の環境は、こちらです。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal $ uname -srvmpio Linux 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu Linux 20.04 LTSです。
Ubuntu Linuxに.NET 5.0をインストールする
Linuxへの.NETのインストールに関するドキュメントは、こちら。
Linux ディストリビューションに .NET をインストールする | Microsoft Docs
Ubuntu Linuxと.NETのサポートマトリクス。
Linux に .NET をインストールする / Ubuntu
インストール方法はLinuxディストリビューションごとにドキュメントがあり、Ubuntu Linuxについてはこちらです。
Ubuntu に .NET をインストールする - .NET | Microsoft Docs
サポートバージョンについても再度記載があります。
では、まずは.NET 5.0をインストールしてみます。
パッケージ署名キーの追加。
$ curl -O -L -s https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb $ sudo dpkg -i packages-microsoft-prod.deb
リポジトリ情報の更新と、必要なパッケージのインストール。
$ sudo apt update && sudo apt install -y apt-transport-https
インストール可能なパッケージに、.NETが含まれるようになっています。こちらはSDKです。
$ apt search dotnet-sdk ソート中... 完了 全文検索... 完了 dotnet-sdk-2.1/groovy 2.1.814-1 amd64 Microsoft .NET Core SDK 2.1.814 dotnet-sdk-3.1/groovy 3.1.407-1 amd64 Microsoft .NET Core SDK 3.1.407 dotnet-sdk-5.0/groovy 5.0.201-1 amd64 Microsoft .NET SDK 5.0.201
ランタイムのみ。
$ apt search aspnetcore-runtime.* ソート中... 完了 全文検索... 完了 aspnetcore-runtime-2.1/focal 2.1.26-1 amd64 Microsoft ASP.NET Core 2.1.26 Shared Framework aspnetcore-runtime-3.1/focal 3.1.13-1 amd64 Shared Framework for hosting of Microsoft ASP.NET Core applications. It is open source, cross-platform and is supported by Microsoft. We hope you enjoy using it! If you do, please consider joining the active community of developers that are contributing to the project on GitHub (https://github.com/aspnet/AspNetCore). We happily accept issues and PRs. aspnetcore-runtime-5.0/focal 5.0.4-1 amd64 Shared Framework for hosting of Microsoft ASP.NET Core applications. It is open source, cross-platform and is supported by Microsoft. We hope you enjoy using it! If you do, please consider joining the active community of developers that are contributing to the project on GitHub (https://github.com/dotnet/aspnetcore). We happily accept issues and PRs.
では、.NET 5.0のSDKをインストール。
※ランタイムのみのインストールも可能なようです
$ sudo apt install dotnet-sdk-5.0
インストールされました。
$ dotnet --version 5.0.201
--list-sdks
でインストールされたSDKの一覧を、--list-runtimes
でインストールされたランタイムの一覧を見ることが
できます。
$ dotnet --list-sdks 5.0.201 [/usr/share/dotnet/sdk] $ dotnet --list-runtimes Microsoft.AspNetCore.App 5.0.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 5.0.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
.NET Core 3.1をインストールする
続いて、.NET Core 3.1をインストールしてみます。
$ sudo apt install dotnet-sdk-3.1
.NET 5.0を先にインストールしているので、dotnet
コマンドが示すバージョンは5.0となっています。
$ dotnet --version 5.0.201
ですが、SDKやランタイムとしては認識されています。
$ dotnet --list-sdks 3.1.407 [/usr/share/dotnet/sdk] 5.0.201 [/usr/share/dotnet/sdk] $ dotnet --list-runtimes Microsoft.AspNetCore.App 3.1.13 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 5.0.4 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.13 [/usr/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 5.0.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
これで、.NET 5.0と.NET Core 3.1の両方がインストールされたことになります。
そして、この状態だとデフォルトは.NET 5.0が使われそうですね。
使ってみる
dotnet
コマンドのヘルプを見てみましょう。
$ dotnet --help .NET SDK (5.0.201) 使用法: dotnet [runtime-options] [path-to-application] [arguments] .NET アプリケーションを実行します。 runtime-options: --additionalprobingpath <path> 調査ポリシーと調査対象アセンブリを含むパス。 --additional-deps <path> 追加の deps.json ファイルへのパス。 --depsfile <application>.deps.json ファイルへのパス。 --fx-version <version> アプリケーションを実行するために使用するインストール済み Shared Framework のバージョン。 --roll-forward <setting> フレームワーク バージョン (LatestPatch、Minor、LatestMinor、Major、LatestMajor、Disable) にロールフォワードします。 --runtimeconfig <application>.runtimeconfig.json ファイルへのパス。 path-to-application: 実行するアプリケーション .dll ファイルへのパス。 使用法: dotnet [sdk-options] [command] [command-options] [arguments] .NET SDK コマンドを実行します。 sdk-options: -d|--diagnostics 診断出力を有効にします。 -h|--help コマンド ラインのヘルプを表示します。 --info .NET 情報を表示します。 --list-runtimes インストール済みランタイムを表示します。 --list-sdks インストール済み SDK を表示します。 --version 使用中の .NET SDK バージョンを表示します。 SDK コマンド: add .NET プロジェクトにパッケージまたは参照を追加します。 build .NET プロジェクトをビルドします。 build-server ビルドによって開始されたサーバーとやり取りします。 clean .NET プロジェクトのビルド出力をクリーンします。 help コマンド ラインのヘルプを表示します。 list .NET プロジェクトのプロジェクト参照を一覧表示します。 msbuild Microsoft Build Engine (MSBuild) コマンドを実行します。 new 新しい .NET プロジェクトまたはファイルを作成します。 nuget 追加の NuGet コマンドを提供します。 pack NuGet パッケージを作成します。 publish .NET プロジェクトを配置のために公開します。 remove .NET プロジェクトからパッケージまたは参照を削除します。 restore .NET プロジェクトに指定されている依存関係を復元します。 run .NET プロジェクトの出力をビルドして実行します。 sln Visual Studio ソリューション ファイルを変更します。 store 指定されたアセンブリをランタイム パッケージ ストアに格納します。 test .NET プロジェクトに指定されているテスト ランナーを使用して、単体テストを実行します。 tool .NET のエクスペリエンスを向上するツールをインストールまたは管理します。 vstest Microsoft Test Engine (VSTest) コマンドを実行します。 バンドルされたツールからの追加コマンド: dev-certs 開発証明書を作成し、管理します。 fsi F# Interactive を開始するか、F# スクリプトを実行します。 sql-cache SQL Server キャッシュ コマンドライン ツール。 user-secrets 開発ユーザーのシークレットを管理します。 watch ファイルが変更されたときにコマンドを実行するファイル ウォッチャーを起動します。 コマンドに関する詳細情報については、'dotnet [command] --help' を実行します。
ビルドなどは、このコマンドでできそうですね。
では、こちらのドキュメントに沿ってコンソールアプリケーション用のプロジェクトを作ってみたいと思います。
チュートリアル: .NET ツールを作成する - .NET CLI | Microsoft Docs
プロジェクトを作成するdotnet new
コマンドを実行してみると、作成できるプロジェクトテンプレートが表示されるようです。
$ dotnet new Templates Short Name Language Tags -------------------------------------------- ------------------- ---------- ---------------------- Console Application console [C#],F#,VB Common/Console Class library classlib [C#],F#,VB Common/Library WPF Application wpf [C#] Common/WPF WPF Class library wpflib [C#] Common/WPF WPF Custom Control Library wpfcustomcontrollib [C#] Common/WPF WPF User Control Library wpfusercontrollib [C#] Common/WPF Windows Forms (WinForms) Application winforms [C#] Common/WinForms Windows Forms (WinForms) Class library winformslib [C#] Common/WinForms Worker Service worker [C#],F# Common/Worker/Web Unit Test Project mstest [C#],F#,VB Test/MSTest NUnit 3 Test Project nunit [C#],F#,VB Test/NUnit NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit xUnit Test Project xunit [C#],F#,VB Test/xUnit Razor Component razorcomponent [C#] Web/ASP.NET Razor Page page [C#] Web/ASP.NET MVC ViewImports viewimports [C#] Web/ASP.NET MVC ViewStart viewstart [C#] Web/ASP.NET Blazor Server App blazorserver [C#] Web/Blazor Blazor WebAssembly App blazorwasm [C#] Web/Blazor/WebAssembly ASP.NET Core Empty web [C#],F# Web/Empty ASP.NET Core Web App (Model-View-Controller) mvc [C#],F# Web/MVC ASP.NET Core Web App webapp [C#] Web/MVC/Razor Pages ASP.NET Core with Angular angular [C#] Web/MVC/SPA ASP.NET Core with React.js react [C#] Web/MVC/SPA ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA Razor Class Library razorclasslib [C#] Web/Razor/Library ASP.NET Core Web API webapi [C#],F# Web/WebAPI ASP.NET Core gRPC Service grpc [C#] Web/gRPC dotnet gitignore file gitignore Config global.json file globaljson Config NuGet Config nugetconfig Config Dotnet local tool manifest file tool-manifest Config Web Config webconfig Config Solution File sln Solution Protocol Buffer File proto Web/gRPC Examples: dotnet new mvc --auth Individual dotnet new xunit dotnet new --help dotnet new classlib --help
console
がコンソールアプリケーションのテンプレートです。
さらにヘルプを見てみます。
$ dotnet new console --help 使用法: new [options] オプション: -h, --help Displays help for this command. -l, --list Lists templates containing the specified template name. If no name is specified, lists all templates. -n, --name The name for the output being created. If no name is specified, the name of the output directory is used. -o, --output Location to place the generated output. -i, --install Installs a source or a template pack. -u, --uninstall Uninstalls a source or a template pack. --interactive Allows the internal dotnet restore command to stop and wait for user input or action (for example to complete authentication). --nuget-source Specifies a NuGet source to use during install. --type Filters templates based on available types. Predefined values are "project" and "item". --dry-run Displays a summary of what would happen if the given command line were run if it would result in a template creation. --force Forces content to be generated even if it would change existing files. -lang, --language Filters templates based on language and specifies the language of the template to create. --update-check Check the currently installed template packs for updates. --update-apply Check the currently installed template packs for update, and install the updates. Console Application (C#) Author: Microsoft Description: A project for creating a command-line application that can run on .NET Core on Windows, Linux and macOS Options: -f|--framework The target framework for the project. net5.0 - Target net5.0 netcoreapp3.1 - Target netcoreapp3.1 Default: net5.0 --langVersion Sets the LangVersion property in the created project file text - Optional --no-restore If specified, skips the automatic restore of the project on create. bool - Optional Default: false
オプションを見てみると、作成するプロジェクトで使う.NETのバージョンなども指定できそうですね。
では、プロジェクトを作成します。
$ dotnet new console -n my-console-project The template "Console Application" was created successfully. Processing post-creation actions... Running 'dotnet restore' on my-console-project/my-console-project.csproj... 復元対象のプロジェクトを決定しています... path/to/my-console-project/my-console-project.csproj を復元しました (71 ms)。 Restore succeeded.
--name
または-n
オプションでプロジェクト名を指定すると、指定された名前のディレクトリ内に必要なファイルが
作成されます。プロジェクト名を指定しない場合は、カレントディレクトリにファイルが生成されるようです。
プロジェクト内に移動。
$ cd my-console-project
作成されたプロジェクトファイル。
my-console-project.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <RootNamespace>my_console_project</RootNamespace> </PropertyGroup> </Project>
生成されたプログラム。
Program.cs
using System; namespace my_console_project { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
.NETのバージョンを出力するように、内容を変更してみましょう。
Program.cs
using System; namespace my_console_project { class Program { static void Main(string[] args) { Console.WriteLine("Hello .NET Core {0}!", Environment.Version.ToString()); } } }
実行。
$ dotnet run Hello .NET Core 5.0.4!
動作しました。
今度は、ビルドして実行可能ファイルを作成してみましょう。
$ dotnet build .NET 向け Microsoft (R) Build Engine バージョン 16.9.0+57a23d249 Copyright (C) Microsoft Corporation.All rights reserved. 復元対象のプロジェクトを決定しています... 復元対象のすべてのプロジェクトは最新です。 my-console-project -> /path/to/my-console-project/bin/Debug/net5.0/my-console-project.dll ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:01.01
作成されたようなので、実行。
$ bin/Debug/net5.0/my-console-project Hello .NET Core 5.0.4!
OKですね。
次は、使用する.NETのバージョンを変更してみようかなと思います。
使用する .NET のバージョンを選択する - .NET | Microsoft Docs
こちらを見ると、プロジェクトファイルを変更してもよさそうですね。しかも、複数バージョン指定できそうです。
チュートリアル: .NET CLI を使用して .NET ツールを作成する / プロジェクトを作成する
今回は、2つの.NETバージョンを指定するようにしてみましょう。変更前のプロジェクトファイルはこちら。
my-console-project.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFrameworks>net5.0;netcoreapp3.1</TargetFrameworks> <RootNamespace>my_console_project</RootNamespace> </PropertyGroup> </Project>
TargetFramework
の部分を
<TargetFramework>net5.0</TargetFramework>
TargetFrameworks
(複数形)に変更して、使用する.NETのバージョンを;
区切りで追加します。
<TargetFrameworks>net5.0;netcoreapp3.1</TargetFrameworks>
ここで指定する名前は、こちらのページの「ターゲット フレームワーク モニカー(TFM)」で表現される名前の
ようですね。
SDK スタイル プロジェクトでのターゲット フレームワーク - .NET | Microsoft Docs
ビルド。
$ dotnet build .NET 向け Microsoft (R) Build Engine バージョン 16.9.0+57a23d249 Copyright (C) Microsoft Corporation.All rights reserved. 復元対象のプロジェクトを決定しています... /path/to/my-console-project/my-console-project.csproj を復元しました (83 ms)。 my-console-project -> /path/to/my-console-project/bin/Debug/netcoreapp3.1/my-console-project.dll my-console-project -> /path/to/my-console-project/bin/Debug/net5.0/my-console-project.dll ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:01.64
各.NETバージョン向けの実行可能ファイルが生成されました。
確認。
$ bin/Debug/net5.0/my-console-project Hello .NET Core 5.0.4! $ bin/Debug/netcoreapp3.1/my-console-project Hello .NET Core 3.1.13!
それぞれの.NETのバージョンで、ビルドできたようです。
ちなみに、このようにTargetFrameworks
で複数の.NETのSDKを指定した状態だと、dotnet run
だけでは実行できなくなります。
$ dotnet run プロジェクトを実行できません プロジェクトは複数のフレームワークを対象としています。'--framework' を使用して、実行するフレームワークを指定してください。
使用する.NETのバージョンを指定する必要があるようです。メッセージにあるように--framework
または-f
オプションで
実行する.NETを指定します。
$ dotnet run -f net5.0 Hello .NET Core 5.0.4! $ dotnet run -f netcoreapp3.1 Hello .NET Core 3.1.13!
とりあえずは、複数バージョンの.NETをUbuntu Linuxにインストールして、実行できました、と。