.NETをインストールする前に

.NETをインストールする前に、テレメトリ機能を無効にする。

vi ~/.profile


# ~/.profileファイル

export DOTNET_CLI_TELEMETRY_OPTOUT=1
# または
export DOTNET_CLI_TELEMETRY_OPTOUT=true


オプトアウトとは、個人情報の第三者提供に関し、個人データの第三者への提供を本人の求めに応じて停止することである。


依存関係のライブラリのインストール

パッケージ管理システムからインストール

パッケージ管理システムを使用してインストールする場合、以下のライブラリが自動的にインストールされる。

libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5


※注意
.NET Core 2.1より以前のバージョンには、以下の依存関係のライブラリもインストールする必要がある。

  • libunwind
  • libuuid


手動でインストール

手動で.NETをインストールする場合および自己完結型ソフトウェアを公開する場合は、以下の依存関係のライブラリをインストールする。

# SUSE
sudo zypper install libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5
または
sudo zypper install lttng-ust libcurl zlib libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5

# PinePhone (Mobian)
sudo apt install libicu67 openssl libssl1.1


※注意
.NET Core 2.1より以前のバージョンには、以下の依存関係のライブラリもインストールする必要がある。

  • libunwind
  • libuuid



リポジトリの登録

パッケージ管理システムからインストール

.NET SDKをインストールする前に、以下のコマンドを入力して、Microsoftリポジトリキーを登録する。

# openSUSE
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
wget https://packages.microsoft.com/config/opensuse/15/prod.repo
sudo mv prod.repo /etc/zypp/repos.d/microsoft-prod.repo
sudo chown root:root /etc/zypp/repos.d/microsoft-prod.repo

# SLE
sudo rpm -Uvh https://packages.microsoft.com/config/sles/15/packages-microsoft-prod.rpm
sudo ln -s /etc/yum.repos.d/microsoft-prod.repo /etc/zypp/repos.d/microsoft-prod.repo


SUSEを最新の状態にするため、以下のコマンドを入力する。

sudo zypper update


手動でインストール

リポジトリの登録は不要である。


.NET 5 SDKのインストール

.NET SDKを使用すると、.NETを使用したソフトウェアが開発できる。
.NET SDK をインストールする場合は、対応するランタイムをインストールする必要はない。

パッケージ管理システムからインストール

.NET 5 SDKをインストールするには、以下のコマンドを実行する。

sudo zypper install dotnet-sdk-5.0


手動でインストール

まず、Microsoftの公式Webサイトにアクセスして、.Net 5 SDKをダウンロードする。
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。

tar xf dotnet-sdk-<バージョン名>-linux-x64.tar.gz
mv dotnet-sdk-<バージョン名>-linux-x64 ~/InstallSoftware/Net_5_SDK


次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。

vi ~/.profile


# ~/.profileファイル

PATH="$HOME/InstallSoftware/Net_5_SDK:$PATH"



.NET 5 ランタイムのインストール

パッケージ管理システムからインストール

ASP.NET Core 5 ランタイムを使用すると、ランタイムを提供しない.NETを使用して開発されたソフトウェアが実行できる。
.NETの最も互換性の高いランタイムであるASP.NET Core ランタイムがインストールには、以下のコマンドを実行する。

sudo zypper install aspnetcore-runtime-5.0


ASP.NET Core 5 ランタイムの代替手段として、ASP.NET Core 5を含まない.NET 5 ランタイムをインストールするには、以下のコマンドを実行する。

sudo zypper install dotnet-runtime-5.0


手動でインストール

Microsoftの公式Webサイトにアクセスして、.NET 5 ランタイムをダウンロードする。
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。

tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz

mv runtime-<バージョン名>-linux-x64-binaries NET_5_Runtime
mv NET_5_Runtime ~/InstallSoftware


次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。

vi ~/.profile


# ~/.profileファイル

PATH="$HOME/InstallSoftware/NET_5_Runtime:$PATH"



.NET Core 3.1 SDKのインストール

.NET Core 3.1 SDKを使用すると、.NETを使用したソフトウェアが開発できる。
.NET Core 3.1 SDKをインストールする場合は、対応するランタイムをインストールする必要はない。

パッケージ管理システムからインストール

.NET Core 3.1 SDKをインストールするには、以下のコマンドを入力する。

sudo zypper install dotnet-sdk-3.1


.NET Core 3.1 ランタイムのみをインストールするには、以下のコマンドを実行する。

sudo zypper install dotnet-runtime-3.1


もし、ASP.NET Core ランタイムも必要ならば、それもインストールする。

※注意
ASP.NET CoreのSDKは、.NET Core SDKに含まれているので注意すること。

sudo zypper install aspnetcore-runtime-3.1


手動でインストール

まず、Microsoftの公式Webサイトにアクセスして、.NET Core 3.1 SDKをダウンロードする。
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。

tar xf sdk-<バージョン名>-linux-x64-binaries.tar.gz

mv sdk-<バージョン名>-linux-x64-binaries NETCore_3_1_SDK
mv NETCore_3_1_SDK ~/InstallSoftware


次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。

vi ~/.profile


# ~/.profileファイル

PATH="$HOME/InstallSoftware/NETCore_3_1_SDK:$PATH"


.NET Core 3.1 ランタイムをインストールする場合も同様、Microsoftの公式Webサイトにアクセスして、.NET Core 3.1 ランタイムをダウンロードする。
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。

tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz

mv runtime-<バージョン名>-linux-x64-binaries NETCore_3_1_Runtime
mv NETCore_3_1_Runtime ~/InstallSoftware


次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。

vi ~/.profile


# ~/.profileファイル

PATH="$HOME/InstallSoftware/NETCore_3_1_Runtime:$PATH"



複数のバージョンのインストール (手動)

.NET Foundationが提供するdotnet-install.shファイルを使用して、.NETの複数のバージョンをインストールできる。
dotnet-install.shファイルのドキュメントは、以下に示すMicrosoft公式Webサイトにある。
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script

以下の例では、"current"チャネルにある最新バージョンを、~/InstallSoftware/NET_SDKディレクトリにインストールしている。

./dotnet-install.sh --install-dir /home/<ユーザ名>/InstallSoftware/NET_SDK -channel Current -version latest


以下の例では、"current"チャネルにある.NET SDK バージョン5.0.403を、~/InstallSoftware/NET_SDKディレクトリにインストールしている。

./dotnet-install.sh --install-dir /home/<ユーザ名>/InstallSoftware/NET_SDK -channel Current -version 5.0.403


また、インストールする前に-Dryrunオプションまたは--dry-runオプションを付加して、インストールをシミュレートすることを推奨する。

./dotnet-install.sh -Dryrun --install-dir /home/<ユーザ名>/InstallSoftware/NET_SDK -channel Current -version latest


インストールの完了後、利用可能な.NET SDKを確認することができる。

dotnet --list-sdks


dotnet --version



複数のバージョンのアンインストール (手動)

dotnet-install.shファイルを使用してインストールした.NETをアンインストール手順を記載する。
自動化された.NET Uninstall Toolは、まだLinuxをサポートしていないため、手動でアンインストールする必要がある。

まず、インストールされている.NETのバージョンを表示する。

dotnet --list-sdks


次に、任意の.NET SDKをアンインストールする。

SDK_VERSION="5.0.403"
DOTNET_UNINSTALL_PATH="${HOME}/InstallSoftware/NET_SDK"

sudo rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION


dotnet-install.shファイルを使用してインストールしている場合、dotnetホストと共有パッケージもインストールされるが、
バージョンによっては、追加でアンインストールしなければならない場合もある。

以下の例では、.NET SDK(sdk、host、shared)を完全にアンインストールしている。

SDK_VERSION="5.0.403"
DOTNET_VERSION="5.0.12"
DOTNET_UNINSTALL_PATH="${HOME}/InstallSoftware/NET_SDK"

sudo rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION
sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.NETCore.App/$DOTNET_VERSION
sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.All/$DOTNET_VERSION
sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.App/$DOTNET_VERSION
sudo rm -rf $DOTNET_UNINSTALL_PATH/host/fxr/$DOTNET_VERSION



.NETランタイムまたは.NET SDKの設定

.NETランタイムを使用したソフトウェアを実行する場合、環境変数DOTNET_ROOTにdotnet実行ファイルがあるディレクトリのフルパスを指定する必要がある。
既に、環境変数PATHにdotnet実行ファイルがあるディレクトリのパスを追加している場合は、以下のように、~/.profileファイル等に追記する。

 # Adding PATH environment variable
 export PATH="<.NETランタイムまたは.NET SDKのインストールディレクトリ>:${PATH}"
 
 # Setting .NET Runtime or .NET SDK Directory
 export DOTNET_ROOT="<.NETランタイムまたは.NET SDKのインストールディレクトリ> 例. {HOME}/InstallSoftware/NET_5_SDK>"
 
 # テレメトリを無効にする場合
 export DOTNET_CLI_TELEMETRY_OPTOUT=1
 # または
 export DOTNET_CLI_TELEMETRY_OPTOUT=true



.NET Core SDKとランタイムの保存場所

.NET Core SDKとランタイムの親ディレクトリは、dotnet --list-sdksコマンドおよびdotnet --list-runtimesコマンドからの出力に一覧表示される。


.NET Coreをアンインストールする方法

.NET Core 2.1以降では、パッケージマネージャー(yumやapt-get、zypper等)を使用してアップグレードする場合、.NET Core SDKをアンインストールする必要はない。
パッケージマネージャーのupdateコマンドやrefreshコマンドでは、新しいバージョンが正常にインストールされると、古いバージョンが自動的に削除されるからである。

パッケージマネージャーを使用して.NET Coreをインストールした場合は、それと同じパッケージマネージャーを使用して、.NET Core SDKまたはランタイムをアンインストールする。

まず、.NET Core SDKと依存ファイルをアンインストールするため、以下のコマンドを実行する。

sudo zypper remove dotnet-sdk-3.1
sudo zypper remove libunwind libicu libuuid


次に、登録したリポジトリを削除する場合は、以下のコマンドを実行する。(削除は必須ではない)

sudo zypper remove /etc/yum.repos.d/microsoft-prod.repo


GPG鍵も含めて削除する場合は、以下のコマンドを実行する。(削除は必須ではない)

sudo rpm -qa gpg-pubkey \* --qf "%{version}-%{release} %{summary}\n" | grep microsoft


上記の検索結果に、********-******** gpg(Microsoft (Release signing) <gpgsecurity@microsoft.com>)のようなリストが表示される。(アスタリスクの箇所がGPG鍵である)
このGPG鍵を使用して、以下のコマンドを実行する。

sudo rpm -e --allmatches gpg-pubkey-xxxxxxxx-xxxxxxxx



C#プロジェクトの作成

C#_Linuxという名前の.NETコンソールプロジェクトを作成する。

  1. VS Codeのメインメニューから、[ファイル] - [フォルダを開く]を選択する。
  2. [フォルダを開く]ダイアログから、C#_Linuxディレクトリを作成して、[フォルダを選択]を選択する。
    このディレクトリ名がプロジェクト名と名前空間名になる。
  3. VS Codeのメインメニューから、[表示] - [端末]を選択する。
  4. VS Codeのメイン画面下部に、[ターミナル]タブが表示される。
  5. [ターミナル]タブにおいて、以下のコマンドを実行する。
    • 単一の.NET SDKをインストールしている場合
      dotnet new console
      または
      dotnet new console --output C#_Sample01
    • 複数の.NET SDKをインストールしている場合
      dotnet new console --framework net6.0 例. .NET 6を使用する場合
      または
      dotnet new console --output C#_Sample01 --framework net6.0 例. .NET 6を使用する場合
  6. ワークスペースから、Program.csファイルを開く。
    初めて、.csファイルを開く場合、OmniSharpがエディタに読み込まれる。
  7. VS Codeの右下に、ソフトウェアのビルドとデバッグに不足しているアセットを追加するメッセージが表示されるため、[Yes]ボタンを選択する。


C#プロジェクトをビルドおよび実行を同時に行う場合、C#プロジェクトのディレクトリに移動して、以下のコマンドを実行する。

dotnet run --project C#_Sample01



C#プロジェクトのデバッグ

入力の許可

デバッグコンソールは、実行中のプログラムのターミナル入力を受け付けないため、ターミナル入力を許可するには、統合ターミナルまたは外部ターミナルを使用する。

まず、プロジェクトディレクトリの.vscode/launch.jsonファイルを開く。
consoleを、internalConsoleから以下のように変更する。

 # VS Codeの統合ターミナルを使用する場合
 "console": "integratedTerminal",
 
 # VS Codeの外部ターミナルを使用する場合
 "console": "externalTerminal",


.csファイルの任意のステップにおいて、[F9]キーを押下してブレークポイントを張る。

[F5]キーを押下して、C#プロジェクトをデバッグする。

.NET SDKのバージョンを切り替える

インストールされている.NET SDKのバージョンを確認する。

dotnet --list-sdks

# 出力例
5.0.403 [/usr/local/share/dotnet/sdk]
6.0.100 [/usr/local/share/dotnet/sdk]


C#のプロジェクトディレクトリに移動して、以下のコマンドを実行する。

cd /<C#等のプロジェクトディレクトリ>
dotnet new globaljson --sdk-version 5.0.403


これにより、global.jsonファイルが以下の内容で作成される。

 {
    "sdk": {
       "version": "5.0.403"
    }
 }


最後に、.NET SDKのバージョンが切り替わっているかどうか確認する。

dotnet --version

# 出力例
5.0.403



C#プロジェクトのリリース

C#のcsproj拡張子のファイルが存在するディレクトリにおいて、以下のコマンドを実行する。

dotnet publish -c:Release -r:<ターゲットプラットフォーム> -p:PublishReadyToRun=<trueまたはfalse> -p:PublishSingleFile=<trueまたはfalse> --self-contained:<trueまたはfalse>


以下の例では、Linux x64向けとPinePhone向けにリリースビルドしている。

# Linux x64向け
dotnet publish -c:Release -r:linux-x64 -p:PublishReadyToRun=false -p:PublishSingleFile=true --self-contained:false

# Linux Arch64向け (PinePhone、Raspberry Pi等)
dotnet publish -c:Release -r:linux-arm64 -p:PublishReadyToRun=false -p:PublishSingleFile=true --self-contained:false


以下に、各オプションの意味を記載する。

  • -c:Release
    リリースビルド
  • -r:<ターゲットプラットフォーム>
    • ターゲットプラットフォームは以下の通りである。
      win10-x64 … ターゲットをWindows 10 x64にする。
      win10-x86 … ターゲットをWindows 10 x86にする。
      linux-x64 … ターゲットをLinux x64にする。
      linux-x86 … ターゲットをLinux x86にする。
      linux-arm64 … ターゲットをLinux aarch64にする。
      linux-arm … ターゲットをLinux arm32にする。
  • -p:PublishReadyToRun=true
    事前コンパイル方式にする。
    初回から起動速度が速くなる。ただし、ファイルサイズが少し大きくなる。
  • -p:PublishSingleFile=true (推奨)
    出力ファイルを1つのexeファイルにまとめる。
  • --self-contained:false (推奨)
    実行ファイルに.NETランタイムを含めない。


リリースビルドする実行ファイルにデバッグ情報を付加しない場合は、C#プロジェクトの.csprojファイルに以下の設定を追記する。(推奨)

 <PropertyGroup>
 
    <!-- ...略 -->
 
    <DebugType Condition="'$(Configuration)' == 'Release'">none</DebugType>
 
    <!-- ...略 -->
 
 </PropertyGroup>


また、VS Codeで開発する場合、C#プロジェクトの.vscodeディレクトリにtasks.jsonファイルを作成して、以下の設定を追加してもよい。
[Ctrl] + [P]キーを同時押下してコマンドパレットを開いて、"task Debug"または"task Relese"と入力することにより、
デバッグビルドまたはリリースビルドすることができるようになる。

 // tasks.json
 
 "version": "〜",
 "tasks": [
 
 // ...略
 
 // リリースビルド
 {
    "label": "Release",
    "command": "dotnet",
    "type": "process",
    "args": [
       "publish",
       "-c:Release",
       "-r:<ターゲットプラットフォーム  例. linux-x64等>",
       "-p:PublishReadyToRun=false",
       "-p:PublishSingleFile=true",
       "--self-contained:false",
       "${workspaceFolder}/<C#プロジェクトのファイル名(.csprojファイル)>",
       "/property:GenerateFullPaths=true",
       "/consoleloggerparameters:NoSummary",
    ],
    "problemMatcher": "$msCompile"
 },
 
 // デバッグビルド
 {
    "label": "Debug",
    "command": "dotnet",
    "type": "process",
    "args": [
       "publish",
       "-c:Debug",
       "-r:<ターゲットプラットフォーム>",
       "-p:PublishReadyToRun=false",
       "-p:PublishSingleFile=true",
       "--self-contained:false",
       "${workspaceFolder}/<C#プロジェクトのファイル名(.csprojファイル)>",
       "/property:GenerateFullPaths=true",
       "/consoleloggerparameters:NoSummary",
    ],
    "problemMatcher": "$msCompile"
 },
 
 // ...略
 
 ]



C#プロジェクトにおけるターゲッットフレームワークの変更

C#プロジェクトのターゲットフレームワークを1つ設定するには、プロジェクトファイル(.csproj)を開いて、TargetFrameworkエレメントを変更する。

以下の例では、ターゲットを.NET 5に変更している。

 .csprojファイル
 
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
   </PropertyGroup>
 </Project>


複数のターゲットを指定する場合、TargetFrameworksエレメントを使用して、セミコロン(;)で囲む必要がある。
以下の例では、ターゲットを.NET Core 3.1、.NET 5、.NET 6に変更している。

 .csprojファイル
 
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFrameworks>netcoreapp3.1;net5.0;6.0</TargetFrameworks>
   </PropertyGroup>
 </Project>


ターゲットフレームワークは、通常、ターゲットフレームワークモニカー(TFM)により参照される。
下表に、.NET SDKおよびNuGetクライアントによってサポートされるターゲットフレームワークを示す。

同等のものが括弧内に示されている。 例えば、win81はnetcore451と同等のTFMである。

サポート対象のターゲット フレームワーク
対象とする Framework TFM
.NET 5以降および.NET Core netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net5.0
net6.0
.NET Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
ユニバーサルWindowsプラットフォーム uap (uap10.0)
uap10.0 (win10) (netcore50)
.NET Micro Framework netmf
Windowsストア netcore (netcore45)
netcore45 (win) (win8)
netcore451 (win81)


TFMの詳細は、Microsoftの公式Webサイトを参照すること。


VS Codeの拡張機能

VS Codeでは、拡張機能をインストールすることにより、C#の機能を強化することができる。

C#の開発におけるVS Codeの拡張機能を以下に示す。

  • C#
    この拡張機能は、シンタックスハイライティング、インテリセンス、定義への移動、すべての参照の検索などを追加します。また、C#アプリケーションのデバッグをサポートします。
    デバッグについては、.NET Coreデバッガの設定方法を参照することを推奨する。

  • C# Extensions
    C#のクラスやインターフェースを簡単に追加できる機能である。
    この拡張機能は、クラスやインターフェイスのための新しいファイルの作成およびプロジェクトの名前空間を設定等を自動で行う。

  • C# Snippets
    C#のコードスニペットを多数収録している。

  • C# XML Documentation Comments
    ソースコードにXMLコメントを追加する時、より快適な操作性を実現する機能である。


ASP.NET Coreの開発におけるVS Codeの拡張機能を以下に示す。

  • ASP.NET Core Snippets
    ASP.NET Coreのコントローラやアクションを簡単に構築するためのスニペットを収録している。

  • WilderMinds社のASP.NET Core Snippets
    ASP.NET Core Snippetsの代わりに、よく似たスニペットセットを収録している。

  • ASP.NET Helper
    Razorのビューページ内にIntellisenseを追加する。

  • HTML Snippets
    HTMLスニペットに加えて、HTMLシンタックスハイライトのサポートを追加する。
    ちなみに、VS CodeにはEmmetが内蔵されており、HTMLのコーディングが非常に速くなる。

  • IntelliSense for CSS class names
    プロジェクト内のCSSクラス定義に基づいて、HTMLのclass属性にCSSクラス名を補完する。


その他

  • Git Extension Pack
    Gitにおける5つの拡張機能をインストールする拡張機能である。