「インストール - .NET SDK」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の69版が非表示)
1行目: 1行目:
== .NETをインストールする前に ==
.NETをインストールする前に、テレメトリ機能を無効にする。<br>
vi ~/.profile
<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル
export DOTNET_CLI_TELEMETRY_OPTOUT=1
# または
export DOTNET_CLI_TELEMETRY_OPTOUT=true
</syntaxhighlight>
<br>
オプトアウトとは、個人情報の第三者提供に関し、個人データの第三者への提供を本人の求めに応じて停止することである。<br>
<br><br>
== 依存関係のライブラリのインストール ==
== 依存関係のライブラリのインストール ==
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
パッケージ管理システムを使用してインストールする場合、以下のライブラリが自動的にインストールされる。<br>
パッケージ管理システムを使用してインストールする場合、以下のライブラリが自動的にインストールされる。<br>
# RHEL
libicu  openssl openssl-libs krb5-server krb5-libs
# SUSE
  libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5
  libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5
<br>
<br>
<u>※注意</u><br>
<u>※注意</u><br>
<u>.NET Core 2.1より以前のバージョンには、以下の依存関係のライブラリもインストールする必要がある。<br></u><br>
<u>.NET Core 2.1以前のバージョンをインストールする場合、以下に示すライブラリもインストールする必要がある。<br></u><br>
* libunwind
# RHEL
* libuuid
sudo dnf iinstall libunwind libuuid
# SUSE
sudo zypper install libunwind libuuid1
<br>
<br>
==== 手動でインストール ====
==== 手動でインストール ====
手動で.NETをインストールする場合および自己完結型ソフトウェアを公開する場合は、以下の依存関係のライブラリをインストールする。<br>
手動で.NETをインストールする場合および自己完結型ソフトウェアを公開する場合は、以下の依存関係のライブラリをインストールする。<br>
# RHEL
sudo dnf install curl libcurl lttng-ust libicu  openssl openssl-libs krb5-server krb5-libs
# SUSE
  sudo zypper install libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5
  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
  sudo zypper install lttng-ust libcurl zlib libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5
# Mobian
sudo apt install curl zlib1g liblttng-ust1 libicu72 openssl libssl3 libkrb5-3
# Manjaro ARM
sudo pacman -S --needed curl zlib lttng-ust icu openssl krb5
<br>
<br>
<u>※注意</u><br>
<u>※注意</u><br>
<u>.NET Core 2.1より以前のバージョンには、以下の依存関係のライブラリもインストールする必要がある。<br></u><br>
<u>.NET Core 2.1より以前のバージョンには、以下の依存関係のライブラリもインストールする必要がある。<br></u><br>
* libunwind
# RHEL
* libuuid
sudo dnf iinstall libunwind libuuid
# SUSE
sudo zypper install libunwind libuuid1
<br><br>
<br><br>


24行目: 60行目:
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
.NET SDKをインストールする前に、以下のコマンドを入力して、Microsoftリポジトリキーを登録する。<br>
.NET SDKをインストールする前に、以下のコマンドを入力して、Microsoftリポジトリキーを登録する。<br>
  # openSUSE
# RHEL
# RHELに.NETをインストールするには、Red Hat Subscription Managerを使用して登録する必要がある
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
# SLE 15
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
  # openSUSE Leap 15
  sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
  sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
  wget https://packages.microsoft.com/config/opensuse/15/prod.repo
  wget https://packages.microsoft.com/config/opensuse/15/prod.repo
30行目: 74行目:
  sudo chown root:root /etc/zypp/repos.d/microsoft-prod.repo
  sudo chown root:root /etc/zypp/repos.d/microsoft-prod.repo


# SLES
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
<br>
<br>
SUSEを最新の状態にするため、以下のコマンドを入力する。<br>
リポジトリを最新の状態にするため、以下のコマンドを入力する。<br>
# RHEL
sudo dnf update
# SUSE
  sudo zypper update
  sudo zypper update
<br>
<br>
==== 手動でインストール ====
==== 手動でインストール ====
リポジトリの登録は不要である。<br>
リポジトリの登録は不要である。<br>
<br><br>
<br><br>


== .NET 5 SDKのインストール ==
== .NET SDKのインストール ==
.NET SDKを使用すると、.NETを使用したソフトウェアが開発できる。<br>
.NET SDKを使用すると、.NETを使用したソフトウェアが開発できる。<br>
<u>.NET SDK をインストールする場合は、対応するランタイムをインストールする必要はない。</u><br>
<u>.NET SDK をインストールする場合は、対応するランタイムをインストールする必要はない。</u><br>
<br>
<br>
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
.NET 5 SDKをインストールするには、以下のコマンドを実行する。<br>
.NET SDKをインストールするには、以下のコマンドを実行する。<br>
  sudo zypper install dotnet-sdk-5.0
# RHEL
# .NETは、RHEL 9のAppStreamリポジトリに含まれている
sudo dnf install dotnet-sdk-<span style="color:#C00000">X</span>.0    # <span style="color:#C00000">X</span> : メジャーバージョン
# SUSE
  sudo zypper install dotnet-sdk-<span style="color:#C00000">X</span>.0 # <span style="color:#C00000">X</span> : メジャーバージョン
<br>
<br>
==== 手動でインストール ====
==== 手動でインストール ====
まず、[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.Net 5 SDKをダウンロードする。<br>
まず、[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.Net SDKをダウンロードする。<br>
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。<br>
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。<br>
  tar xf dotnet-sdk-<バージョン名>-linux-x64.tar.gz
  tar xf dotnet-sdk-<バージョン名>-linux-x64.tar.gz
  mv dotnet-sdk-<バージョン名>-linux-x64 ~/InstallSoftware/Net_5_SDK
  mv dotnet-sdk-<バージョン名>-linux-x64 <任意のディレクトリ>
<br>
<br>
次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。<br>
次に、~/.profileファイル等に、環境変数<code>PATH</code>を設定する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
<syntaxhighlight lang="sh">
  # ~/.profileファイル
  # ~/.profileファイル
   
   
  PATH="$HOME/InstallSoftware/Net_5_SDK:$PATH"
  export PATH="<.NET SDKのインストールディレクトリ>:$PATH"
</syntaxhighlight>
<br><br>
<br><br>


== .NET 5 ランタイムのインストール ==
== .NETランタイムのインストール ==
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
ASP.NET Core 5 ランタイムを使用すると、ランタイムを提供しない.NETを使用して開発されたソフトウェアが実行できる。<br>
ASP.NETランタイムを使用すると、ランタイムを提供しない.NETを使用して開発されたソフトウェアが実行できる。<br>
.NETの最も互換性の高いランタイムであるASP.NET Core ランタイムがインストールには、以下のコマンドを実行する。<br>
.NETの最も互換性の高いランタイムであるASP.NETランタイムがインストールには、以下のコマンドを実行する。<br>
  sudo zypper install aspnetcore-runtime-5.0
# RHEL
sudo dnf install aspnetcore-runtime-<span style="color:#C00000">X</span>.0    # <span style="color:#C00000">X</span> : メジャーバージョン
# SUSE
  sudo zypper install aspnetcore-runtime-<span style="color:#C00000">X</span>.0 # <span style="color:#C00000">X</span> : メジャーバージョン
<br>
<br>
ASP.NET Core 5 ランタイムの代替手段として、ASP.NET Core 5を含まない.NET 5 ランタイムをインストールするには、以下のコマンドを実行する。<br>
ASP.NETランタイムの代替手段として、ASP.NETを含まない.NETランタイムをインストールする場合は、以下に示すコマンドを実行する。<br>
  sudo zypper install dotnet-runtime-5.0
# RHEL
sudo dnf install dotnet-runtime-<span style="color:#C00000">X</span>.0    # <span style="color:#C00000">X</span> : メジャーバージョン
# SUSE
  sudo zypper install dotnet-runtime-<span style="color:#C00000">X</span>.0 # <span style="color:#C00000">X</span> : メジャーバージョン
<br>
<br>
==== 手動でインストール ====
==== 手動でインストール ====
[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.NET 5 ランタイムをダウンロードする。<br>
[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.NETランタイムをダウンロードする。<br>
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。<br>
ダウンロードしたファイルを解凍して、任意のディレクトリに保存する。<br>
  tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz
  tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz
   
   
  mv runtime-<バージョン名>-linux-x64-binaries NET_5_Runtime
  mv runtime-<バージョン名>-linux-x64-binaries <任意のディレクトリ>
mv NET_5_Runtime ~/InstallSoftware
<br>
<br>
次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。<br>
次に、~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
<syntaxhighlight lang="sh">
  # ~/.profileファイル
  # ~/.profileファイル
   
   
  PATH="$HOME/InstallSoftware/NET_5_Runtime:$PATH"
  export PATH="<.NETランタイムのインストールディレクトリ>:$PATH"
</syntaxhighlight>
<br><br>
<br><br>


110行目: 173行目:
  tar xf sdk-<バージョン名>-linux-x64-binaries.tar.gz
  tar xf sdk-<バージョン名>-linux-x64-binaries.tar.gz
   
   
  mv sdk-<バージョン名>-linux-x64-binaries NETCore_3_1_SDK
  mv sdk-<バージョン名>-linux-x64-binaries <任意のディレクトリ>
mv NETCore_3_1_SDK ~/InstallSoftware
<br>
<br>
次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。<br>
次に、~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
<syntaxhighlight lang="sh">
  # ~/.profileファイル
  # ~/.profileファイル
   
   
  PATH="$HOME/InstallSoftware/NETCore_3_1_SDK:$PATH"
  export PATH="<.NET Core SDK 3.1のインストールディレクトリ>:$PATH"
</syntaxhighlight>
<br>
<br>
.NET Core 3.1 ランタイムをインストールする場合も同様、[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.NET Core 3.1 ランタイムをダウンロードする。<br>
.NET Core 3.1 ランタイムをインストールする場合も同様、[https://dotnet.microsoft.com/download/dotnet Microsoftの公式Webサイト]にアクセスして、.NET Core 3.1 ランタイムをダウンロードする。<br>
124行目: 188行目:
  tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz
  tar xf runtime-<バージョン名>-linux-x64-binaries.tar.gz
   
   
  mv runtime-<バージョン名>-linux-x64-binaries NETCore_3_1_Runtime
  mv runtime-<バージョン名>-linux-x64-binaries <任意のディレクトリ>
mv NETCore_3_1_Runtime ~/InstallSoftware
<br>
<br>
次に、~/.profileファイルまたは~/.bashrcファイル等に、環境変数PATHを設定する。<br>
次に、~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
<syntaxhighlight lang="sh">
  # ~/.profileファイル
  # ~/.profileファイル
   
   
  PATH="$HOME/InstallSoftware/NETCore_3_1_Runtime:$PATH"
  export PATH="<.NET Core ランタイムのインストールディレクトリ>:$PATH"
</syntaxhighlight>
<br><br>
<br><br>


== 複数のバージョンのインストール (手動) ==
== 複数のバージョンのインストール (手動) ==
.NET Foundationが提供する[https://dot.net/v1/dotnet-install.sh dotnet-install.sh]ファイルを使用して、.NETの複数のバージョンをインストールできる。<br>
.NET Foundationが提供する[https://dot.net/v1/dotnet-install.sh インストールスクリプト]を使用して、.NETの複数のバージョンをインストールできる。<br>
dotnet-install.shファイルのドキュメントは、以下に示すMicrosoft公式Webサイトにある。<br>
または、以下に示すコマンドを実行して、インストールスクリプトをダウンロードすることもできる。<br>
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script<br>
wget https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh
<br>
<br>
以下の例では、"current"チャネルにある最新バージョンを、~/InstallSoftware/NET_SDKディレクトリにインストールしている。<br>
インストールシェルスクリプトのマニュアルは、[https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script Microsoftの公式Webサイト]にある。<br>
  ./dotnet-install.sh --install-dir /home/<ユーザ名>/InstallSoftware/NET_SDK -channel Current -version latest
<br>
<u>現在、Microsoftから配布されている.NET SDKのバージョンを確認する場合は、[https://dotnet.microsoft.com/ja-jp/download/dotnet .NETの公式Webサイト]を参照すること。</u><br>
<br>
インストールシェルスクリプトに実行権限を付加する。<br>
  chmod u+x ./dotnet-install.sh
<br>
.NET SDKをインストールする。<br>
<br>
* <code>--channel</code>オプション
** STS
**: 最新の標準期間サポートリリース。
** LTS
**: 最新の長期サポートリリース。
** 特定のリリースを表す <u>A.B</u> 形式の2部構成のバージョン
**: <code>8.0</code>等
** 特定のSDKリリースを表す <u>A.B.Cxx</u> 形式の3部構成のバージョン
**: <code>8.0.302</code>や<code>6.0.423</code>等
**: .NET 5以降で使用できる。
*: <br>
* <code>-InstallDir <.NET SDKのインストールディレクトリ></code> または <code>--install-dir <.NET SDKのインストールディレクトリ></code>
*: .NET SDKのインストールディレクトリを指定する。
# 最新の.NET SDKをインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version latest
# .NET SDK 9.0.100をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel <STS または Current> -version 9.0.100
# .NET SDK 8.0.302 (LTS)をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version 8.0.302
# .NET SDK 6.0.403 (LTS)をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version 6.0.423
<br>
<br>
また、<code>-Dryrun</code>オプションを付加して、インストールをシミュレートすることを推奨する。<br>
また、インストールする前に<code>-Dryrun</code>オプションまたは<code>--dry-run</code>オプションを付加して、インストールをシミュレートすることもできる。<br>
# 最新の.NET SDKのインストールをシミュレートする場合
./dotnet-install.sh -Dryrun --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version latest
<br>
<br>
インストールの完了後、利用可能な.NET SDKを確認することができる。<br>
インストールの完了後、利用可能な.NET SDKを確認することができる。<br>
  dotnet --list-sdks
  dotnet --list-sdks
<br>
dotnet --version
<br><br>
<br><br>


159行目: 255行目:
<br>
<br>
次に、任意の.NET SDKをアンインストールする。<br>
次に、任意の.NET SDKをアンインストールする。<br>
  SDK_VERSION="5.0.100"
  <syntaxhighlight lang="sh">
  DOTNET_UNINSTALL_PATH="/home/<ユーザ名>/InstallSoftware/NET_SDK"
export SDK_VERSION="<.NET SDKのバージョン  例: 7.0.400>"; \
  export DOTNET_UNINSTALL_PATH="<.NET SDKのインストールディレクトリ>"
   
   
  sudo rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION
  rm -rf "$DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION"
</syntaxhighlight>
<br>
<br>
dotnet-install.shファイルを使用してインストールしている場合、dotnetホストと共有パッケージもインストールされるが、<br>
<u>dotnet-install.shファイルを使用してインストールしている場合</u>、dotnetホストと共有パッケージもインストールされるが、<br>
バージョンによっては、追加でアンインストールしなければならない場合もある。<br>
バージョンによっては、追加でアンインストールしなければならない場合もある。<br>
<br>
<br>
以下の例では、.NET SDK(sdk、host、shared)を完全にアンインストールしている。<br>
以下の例では、.NETランタイム、および、.NET SDK(sdk、host、shared)を完全にアンインストールしている。<br>
  SDK_VERSION="5.0.100"
  <syntaxhighlight lang="sh">
  DOTNET_VERSION="5.0.0"
export RUNTIME_VERSION="<.NETランタイムのバージョン  例 : 7.0.10>"; \
  DOTNET_UNINSTALL_PATH="/home/<ユーザ名>/InstallSoftware/NET_SDK"
  export SDK_VERSION="<.NET SDKのバージョン  例 : 7.0.400>"
   
cd <.NET SDKのインストールディレクトリ>
   
   
  sudo rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION
  rm -rf "host/fxr/$RUNTIME_VERSION"; \
  sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.NETCore.App/$DOTNET_VERSION
rm -rf "packs/Microsoft.AspNetCore.App.Ref/$RUNTIME_VERSION"; \
  sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.All/$DOTNET_VERSION
  rm -rf "packs/Microsoft.NETCore.App.Host.linux-x64/$RUNTIME_VERSION"; \
  sudo rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.App/$DOTNET_VERSION
rm -rf "packs/Microsoft.NETCore.App.Ref/$RUNTIME_VERSION"; \
  sudo rm -rf $DOTNET_UNINSTALL_PATH/host/fxr/$DOTNET_VERSION
  rm -rf "sdk/$SDK_VERSION"; \
rm -rf "sdk-manifests/$RUNTIME_VERSION"; \
rm -rf "shared/Microsoft.AspNetCore.All/$RUNTIME_VERSION"; \
  rm -rf "shared/Microsoft.AspNetCore.App/$RUNTIME_VERSION"; \
  rm -rf "shared/Microsoft.NETCore.App/$RUNTIME_VERSION"; \
rm -rf "templates/$RUNTIME_VERSION"
</syntaxhighlight>
<br><br>
<br><br>


== .NET Core SDKとランタイムの保存場所 ==
== .NETランタイムまたは.NET SDKの設定 ==
.NET Core SDKとランタイムの親ディレクトリは、dotnet --list-sdksコマンドおよびdotnet --list-runtimesコマンドからの出力に一覧表示される。<br>
.NETランタイムを使用したソフトウェアを実行する場合、環境変数<code>DOTNET_ROOT</code>にdotnet実行ファイルがあるディレクトリのフルパスを指定する必要がある。<br>
既に、環境変数<code>PATH</code>にdotnet実行ファイルがあるディレクトリのパスを追加している場合は、以下のように、~/.profileファイル等に追記する。
<syntaxhighlight lang="sh">
# 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_8_SDK>"
# テレメトリを無効にする場合
export DOTNET_CLI_TELEMETRY_OPTOUT=1
# または
export DOTNET_CLI_TELEMETRY_OPTOUT=true
</syntaxhighlight>
<br><br>
<br><br>


== .NET Coreをアンインストールする方法 ==
== .NETランタイム / .NET SDKの保存場所 ==
.NET Core 2.1以降では、パッケージマネージャー(yumやapt-get、zypper等)を使用してアップグレードする場合、.NET Core SDKをアンインストールする必要はない。<br>
.NETランタイム / .NET SDKのインストールディレクトリは、<code>dotnet --list-sdks</code>コマンドおよび<code>dotnet --list-runtimes</code>コマンドからの出力に一覧表示される。<br>
パッケージマネージャーのupdateコマンドやrefreshコマンドでは、新しいバージョンが正常にインストールされると、古いバージョンが自動的に削除されるからである。<br>
<br><br>
 
== .NETランタイム / .NET SDKのアンインストール ==
.NET Core 2.1以降では、パッケージ管理システム(<code>dnf</code>、<code>apt</code>、<code>zypper</code>等)を使用してアップグレードする場合、.NETをアンインストールする必要はない。<br>
なぜなら、パッケージ管理システムの<code>update</code>コマンドまたは<code>refresh</code>コマンド等では、新しいバージョンが正常にインストールされる時、古いバージョンが自動的に削除されるからである。<br>
<br>
<br>
パッケージマネージャーを使用して.NET Coreをインストールした場合は、それと同じパッケージマネージャーを使用して、.NET Core SDKまたはランタイムをアンインストールする。<br>
パッケージ管理システムを使用して.NETランタイム / .NET SDKをインストールした場合は、パッケージ管理システムを使用して.NETランタイム / .NET SDKをアンインストールする。<br>
<br>
<br>
まず、.NET Core SDKと依存ファイルをアンインストールするため、以下のコマンドを実行する。<br>
まず、.NET SDKと依存ファイルをアンインストールするため、以下のコマンドを実行する。<br>
  sudo zypper remove dotnet-sdk-3.1
# RHEL
  sudo zypper remove libunwind libicu libuuid
sudo dnf remove dotnet-sdk-<バージョン> dotnet-runtime-<バージョン>
sudo dnf remove libunwind libicu libuuid
# SUSE
  sudo zypper remove dotnet-sdk-<バージョン> dotnet-runtime-<バージョン>
  sudo zypper remove libunwind libicu libuuid1
<br>
<br>
次に、登録したリポジトリを削除する場合は、以下のコマンドを実行する。(削除は必須ではない)<br>
次に、登録したリポジトリを削除する場合は、以下のコマンドを実行する。(削除は必須ではない)<br>
# RHEL
sudo dnf remove /etc/yum.repos.d/microsoft-prod.repo
# SUSE
  sudo zypper remove /etc/yum.repos.d/microsoft-prod.repo
  sudo zypper remove /etc/yum.repos.d/microsoft-prod.repo
<br>
<br>
GPG鍵も含めて削除する場合は、以下のコマンドを実行する。(削除は必須ではない)<br>
GPG鍵も含めて削除する場合は、以下のコマンドを実行する。(削除は必須ではない)<br>
# RHEL / SUSE
  sudo rpm -qa gpg-pubkey \* --qf "%{version}-%{release} %{summary}\n" | grep microsoft
  sudo rpm -qa gpg-pubkey \* --qf "%{version}-%{release} %{summary}\n" | grep microsoft
<br>
<br>
202行目: 335行目:
このGPG鍵を使用して、以下のコマンドを実行する。
このGPG鍵を使用して、以下のコマンドを実行する。
  sudo rpm -e --allmatches gpg-pubkey-xxxxxxxx-xxxxxxxx
  sudo rpm -e --allmatches gpg-pubkey-xxxxxxxx-xxxxxxxx
<br><br>
== 一時ファイルの自動生成の無効化 ==
.NETを使用するとき、/tmpディレクトリ内にclr-debug-pipeファイル(パイプファイル)およびdotnet-diagnostic(ソケットファイル)ファイルが自動的に作成される。<br>
これらのファイルの自動生成を抑制する場合、~/.profileファイル等に以下に示す設定を追記する。<br>
vi ~/.profile
<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル
# デバッガ、プロファイラ、EventPipeの診断を有効または無効にする
# ただし、無効にする場合、デバッグ不可能となることに注意する
# export COMPlus_EnableDiagnostics=0  # または、DOTNET_EnableDiagnostics=0
export DOTNET_Diagnostics_LogDirectory="/dev/null"
export DOTNET_Diagnostics_AutoSaveDump=false
</syntaxhighlight>
<br><br>
<br><br>


212行目: 362行目:
# VS Codeのメイン画面下部に、[ターミナル]タブが表示される。
# VS Codeのメイン画面下部に、[ターミナル]タブが表示される。
# [ターミナル]タブにおいて、以下のコマンドを実行する。
# [ターミナル]タブにおいて、以下のコマンドを実行する。
#: <code>dotnet new console</code>
#* 単一の.NET SDKをインストールしている場合
#: または
#*: <code>dotnet new console</code>
#: <code>dotnet new console --output C#_Sample01</code>
#*: または
#*: <code>dotnet new console --output C#_Sample01</code>
#* 複数の.NET SDKをインストールしている場合
#*: <code>dotnet new console --framework net6.0</code> 例. .NET 6を使用する場合
#*: または
#*: <code>dotnet new console --output C#_Sample01 --framework net6.0</code> 例. .NET 6を使用する場合
# ワークスペースから、Program.csファイルを開く。<br>初めて、.csファイルを開く場合、OmniSharpがエディタに読み込まれる。
# ワークスペースから、Program.csファイルを開く。<br>初めて、.csファイルを開く場合、OmniSharpがエディタに読み込まれる。
# VS Codeの右下に、ソフトウェアのビルドとデバッグに不足しているアセットを追加するメッセージが表示されるため、[Yes]ボタンを選択する。
# VS Codeの右下に、ソフトウェアのビルドとデバッグに不足しているアセットを追加するメッセージが表示されるため、[Yes]ボタンを選択する。
223行目: 378行目:


== C#プロジェクトのデバッグ ==
== C#プロジェクトのデバッグ ==
デバッグコンソールは、実行中のプログラムのターミナル入力を受け付けないため、<br>
==== launch.json ====
デバッグ中において、ターミナル入力を許可するには、統合ターミナルまたは外部ターミナルを使用する。<br>
下表に、launch.jsonファイルの設定の意味を示す。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;" | 属性
! style="background-color:#66CCFF;" | 意味
|-
| preLaunchTask || デバッグ実行前に行うタスクを指定する。<br>tasks.jsonファイルにある<code>tasks</code>の<code>label</code>属性の値を指定。
|-
| program || 起動するプログラムのパスを指定する。<br>初期設定は、${workspaceFolder}/bin/Debug/netX.Y/<ターゲットプラットフォーム>/<C#プロジェクト名>.dll
|-
| args || 実行ファイルに与える引数を指定する。<br>複数の引数を指定する場合は、カンマ(,)で区切る。
|-
| cwd || プログラムの実行に使用するディレクトリを指定する。<br>初期設定は、<code>${workspaceFolder}</code>
|-
| console ||
デバッグ対象のプログラムを起動するコンソールの指定する。<br>
* internalConsole (デフォルト)
*: VS Codeのデバッグコンソールを使用する。
* externalTerminal
*: ユーザが指定したターミナルを使用する。
* integratedTerminal
*: [ターミナル]パネルを使用する。
|-
| internalConsoleOptions ||
* openOnFirstSessionStart (デフォルト)
*: 初回のデバッグセッション開始時のみデバッグコンソールを開く。
*: その後は開いたコンソールが再利用される。
* openOnSessionStart
*: デバッグセッションが開始されるごとにデバッグコンソールを新規に開く。
* neverOpen
*: 入力を許可する。(<code>Console.Readline</code>メソッドを使用する場合等)
*: また、デバッグコンソールを一切表示しない。
|-
| externalConsoleOptions ||
<code>console</code>属性が<code>externalTerminal</code>の場合、設定が有効になる。<br>
* openOnFirstSessionStart (デフォルト)
*: 初回のデバッグセッション開始時のみデバッグコンソールを開く。
*: その後は開いたコンソールが再利用される。
* openOnSessionStart
*: デバッグセッションが開始されるごとにデバッグコンソールを新規に開く。
* neverOpen
*: 入力を許可する。(<code>Console.Readline</code>メソッドを使用する場合等)
*: また、デバッグコンソールを一切表示しない。
|-
| stopAtEntry ||
*true
*: プログラムをデバッグする場合、エントリポイントでデバッグを一時停止する。
*: (プログラムの起動直後にデバッグ実行を中断する)
|}
</center>
<br>
その他、下表のような属性が設定できる。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;" | 属性
! style="background-color:#66CCFF;" | 意味
|-
| env || 環境変数を指定する。
|-
| launchBrowser || Webアプリケーションのデバッグを行う場合、起動するWebブラウザを指定する。
|-
| sourceFileMap || ソースファイルのマッピングを指定する。
|-
| symbolPath || シンボルパスを設定する。
|-
| justMyCode ||
* true (デフォルト)
*: 設計者の記述したコードのみデバッグする。
* false
*: 外部ライブラリも含めてデバッグする。
|-
| requireExactSource || デバッグ実行しているプログラムと一致したpdbファイルおよびソースファイルを必要とする。
|-
| enableStepFiltering || マネージコードのプロパティおよび演算子についてもステップ実行を行う。
|-
| logging || 出力コンソールに出力するログの種類を指定する。
|-
| pipeTransport || VS Codeとデバッガのバックエンドを接続するため、リモートコンピュータに接続する必要がある場合の設定を記述する。
|}
</center>
<br>
 
==== 入力の許可 ====
デバッグコンソールは、実行中のプログラムのターミナル入力を受け付けないため、ターミナル入力を許可するには、統合ターミナルまたは外部ターミナルを使用する。<br>
<br>
<br>
まず、.vscode/launch.jsonファイルを開く。<br>
まず、プロジェクトディレクトリの.vscode/launch.jsonファイルを開く。<br>
<code>console</code>を、<code>internalConsole</code>から<code>integratedTerminal</code>に変更する。<br>
<code>console</code>を、<code>internalConsole</code>から以下のように変更する。<br>
  <syntaxhighlight lang="json">
  <syntaxhighlight lang="json">
  # VS Codeの統合ターミナルを使用する場合
  # VS Codeの統合ターミナルを使用する場合
239行目: 479行目:
<br>
<br>
[F5]キーを押下して、C#プロジェクトをデバッグする。<br>
[F5]キーを押下して、C#プロジェクトをデバッグする。<br>
<br>
==== .NET SDKのバージョンを切り替える ====
インストールされている.NET SDKのバージョンを確認する。<br>
dotnet --list-sdks
# 出力例
5.0.403 [/usr/local/share/dotnet/sdk]
6.0.100 [/usr/local/share/dotnet/sdk]
<br>
C#のプロジェクトディレクトリに移動して、以下のコマンドを実行する。<br>
cd /<C#等のプロジェクトディレクトリ>
dotnet new globaljson --sdk-version 5.0.403
<br>
これにより、global.jsonファイルが以下の内容で作成される。<br>
<syntaxhighlight lang="json">
{
    "sdk": {
      "version": "5.0.403"
    }
}
</syntaxhighlight>
<br>
最後に、.NET SDKのバージョンが切り替わっているかどうか確認する。<br>
dotnet --version
# 出力例
5.0.403
<br><br>
== C#プロジェクトのリリース ==
==== 単一のTFM ====
C#のcsproj拡張子のファイルが存在するディレクトリにおいて、以下のコマンドを実行する。<br>
dotnet publish -c:Release -r:<ターゲットプラットフォーム> -p:PublishReadyToRun=<trueまたはfalse> -p:PublishSingleFile=<trueまたはfalse> --self-contained:<trueまたはfalse>
<br>
以下の例では、Linux x64向けとPinePhone向けにリリースビルドしている。<br>
# 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
# Linux Arch64向け TFMの指定
dotnet publish -c:Release -r:linux-arm64 -p:PublishReadyToRun=false -p:PublishSingleFile=true --self-contained false -f:<.NETのターゲットフレームワークのバージョン  例: net8.0>
<br>
以下に、各オプションの意味を記載する。<br>
* <code>-c:Release</code>
*: リリースビルド
*: <code>-c Release</code>オプションは不要である。
*: このオプションは、ソフトウェアのリリースビルドを公開することを明示するために提供されている。
*: .NET Core SDK 3.1以降を使用する場合、<code>dotnet publish</code>コマンドを実行する時の既定の公開モードは、フレームワークに依存する実行可能ファイルである。
*: <br>
* <code>-r:<ターゲットプラットフォーム></code>
** ターゲットプラットフォームは以下の通りである。
**: win-x64 … ターゲットをWindows x64にする。
**: win-x86 … ターゲットをWindows x86にする。
**: win-arm64 … ターゲットをWindows AArch64にする。
**: linux-x64 … ターゲットをLinux x64にする。
**: linux-x86 … ターゲットをLinux x86にする。
**: linux-musl-x64 … ターゲットをAlpine Linuxのようなmuslを使用した軽量ディストリビューションにする。
**: linux-arm64 … ターゲットをLinux AArch64にする。
**: linux-arm … ターゲットをLinux Arm32にする。
**: linux-musl-arm64 … ターゲットをAArch64 Arm v8向けDockerイメージおよび最小限のベースイメージの構築に使用にする。
**: linux-bionic-arm64 … ターゲットをAndroidのbionic libcを使用したLinuxディストリビューションにする。 例: Termux
**: osx-arm64 … ターゲットをMacOS AArch64にする。
**: osx-x64 … ターゲットをMacOS x64にする。
**: android-arm64 … ターゲットをAndroidにする。
**: ios-arm64 … ターゲットをiPhoneにする。
*: <br>
* <code>-p:PublishReadyToRun=true</code>
*: 事前コンパイル方式にする。
*:初回から起動速度が速くなる。ただし、ファイルサイズが少し大きくなる。
*: <br>
* <code>-p:PublishSingleFile=true</code> (推奨)
*: 出力ファイルを1つの実行ファイルにまとめる。
*: <br>
*: <u>ただし、.NET 5以降では、単一の実行ファイルにする場合、使用できないAPIや動作が変化するAPIが存在する。(Assemblyのパスが取得できない等)</u>
*: <u>代替手段も存在するため、以下に示すMicrosoftの公式Webサイトを参照すること。</u>
*: https://docs.microsoft.com/ja-jp/dotnet/core/deploying/single-file#api-incompatibility
*: <br>
* <code>--self-contained false</code> (推奨)
*: .NETランタイムを含めた単一の実行ファイルを生成する。
*: 実行環境に.NETランタイムがインストールされている必要がない。
*: <br>
* -p:PublishTrimmed=true
*: 使用していない依存関係を削除する。
*: アプリケーションサイズを削減できる。
*: <br>
* -p:IncludeNativeLibrariesForSelfExtract=true
*: ネイティブライブラリ (libHarfBuzzSharp.soやlibSkiaSharp.so等) を実行ファイルに組み込む。
*: 実行時に自動的に展開される。
<br>
<u>※注意</u><br>
<u>PublishTrimmedオプションを使用する場合、リフレクションを使用しているコードに影響が出る可能性がある。</u><br>
<u>ただし、生成されるファイルサイズは大きくなるが、単一の実行ファイルで完結する。</u><br>
<u>SkiaSharpのような特殊なネイティブライブラリを使用している場合は、追加の設定が必要になることがある。</u><br>
<br>
<u>リリースビルドする実行ファイルにデバッグ情報を付加しない場合は、プロジェクトファイル(.csproj拡張子)ファイルに以下の設定を追記する。(推奨)</u><br>
<syntaxhighlight lang="xml">
<PropertyGroup>
    <!-- ...略 -->
    <DebugType Condition="'$(Configuration)' == 'Release'">none</DebugType>
    <!-- ...略 -->
</PropertyGroup>
</syntaxhighlight>
<br>
また、プロジェクトファイル(.csproj拡張子)を編集して、発行を指定することもできる。<br>
これらのプロパティには、以下に示すエレメントがある。<br>
* PublishSingleFile
*: 単一ファイルの発行を有効にする。
*: また、<code>dotnet build</code>コマンド実行時の単一ファイルの警告を有効にする。
*: <br>
* SelfContained
*: 発行するプロジェクトが自己完結型またはフレームワーク依存であるかを判断する。
*: <br>
*: 自己完結型としてソフトウェアを発行する時、プラットフォーム固有の実行可能ファイルが生成される。
*: 出力されるpublishディレクトリには、.NETライブラリやターゲットランタイム等のソフトウェアの全てのコンポーネントが格納される。
*: この時、発行したソフトウェアは、他の.NETから分離されており、ローカルにインストールされた共有ランタイムを使用しない。
*: そのため、発行したソフトウェアを使用するユーザは、.NETのダウンロードおよびインストールを行うことは不要となる。
*: <br>
* RuntimeIdentifier
*: ターゲットとするOSとアーキテクチャの種類を指定する。
*: デフォルトでは、<code><SelfContained>true</SelfContained></code>が設定される。
*: 単一ファイルのプロジェクトは、常にOSとアーキテクチャに固有である。
*: 複数のOSおよびアーキテクチャを発行する場合は、<code>linux-x64</code>、<code>linux-arm64</code>、<code>win10-x64</code>等、構成ごとに発行する必要がある。
<syntaxhighlight lang="xml">
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <PublishSingleFile>true</PublishSingleFile>
    <SelfContained>true</SelfContained>
    <RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
  </PropertyGroup>
</Project>
</syntaxhighlight>
<br>
また、VS Codeで開発する場合、C#プロジェクトの.vscodeディレクトリにtasks.jsonファイルを作成して、以下の設定を追加してもよい。<br>
[Ctrl] + [P]キーを同時押下してコマンドパレットを開いて、"task Debug"または"task Relese"と入力することにより、<br>
デバッグビルドまたはリリースビルドすることができるようになる。<br>
<syntaxhighlight lang="js">
// 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"
},
// ...略
]
</syntaxhighlight>
<br>
==== 複数のTFM ====
複数のTFMを指定するプロジェクトをpulishする場合、標準のpublishコマンドでは失敗するが、<br>
マルチターゲットを実行するカスタムターゲットを作成することができる。<br>
<br>
これを行うには、ソリューションディレクトリ下にDirectory.Build.propsファイル、または、Directory.Build.targetsファイルを作成する。<br>
vi Directory.Build.props
または
vi Directory.Build.targets
<br>
<syntaxhighlight lang="xml">
<!--
Directory.Build.propsファイル  または  Directory.Build.targetsファイル
-->
<Project>
  <Target Name="PublishProjectIfFrameworkSet"
          DependsOnTargets="Publish"
          Condition=" '$(TargetFramework)' != '' " />
  <Target Name="PublishProjectForAllFrameworksIfFrameworkUnset" Condition=" '$(TargetFramework)' == '' ">
    <ItemGroup>
      <_PublishFramework Include="$(TargetFrameworks)" />
    </ItemGroup>
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="Publish" Properties="TargetFramework=%(_PublishFramework.Identity)" />
  </Target>
  <Target Name="PublishAll"
          DependsOnTargets="PublishProjectIfFrameworkSet;PublishProjectForAllFrameworksIfFrameworkUnset" />
</Project>
</syntaxhighlight>
<br>
ソリューションディレクトリ下で以下に示すコマンドを実行することにより、定義された全ての.NETを使用してビルドすることができる。<br>
dotnet msbuild /t:PublishAll /p:Configuration=Release
<br><br>
== プロジェクトのターゲッットフレームワークの指定 ==
ターゲットフレームワークは、プロジェクトファイルで指定する。<br>
<br>
単一のターゲットフレームワークを指定する場合、プロジェクトファイル (.csprojファイル) の<code>TargetFramework</code>エレメントに記述する。<br>
<br>
以下の例では、ターゲットを.NET 6に変更している。<br>
<syntaxhighlight lang="xml">
.csprojファイル
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
</Project>
</syntaxhighlight>
<br>
複数のターゲットを指定する場合、プロジェクトファイル(.csproj)の<code>TargetFrameworks</code>エレメントにセミコロン(<code>;</code>)で囲んで記述する。<br>
以下の例では、ターゲットを.NET Core 3.1、.NET 6、.NET 7に変更している。<br>
<syntaxhighlight lang="xml">
.csprojファイル
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFrameworks>netcoreapp3.1;net6.0;net7.0</TargetFrameworks>
  </PropertyGroup>
</Project>
</syntaxhighlight>
<br>
また、各ターゲットフレームワークのアセンブリを条件付きで参照することができる。<br>
<code>if-elif-else</code>プリプロセッサを使用して、それらのアセンブリに対して条件付きでコンパイルすることもできる。<br>
<br>
以下の例では、.NET 6、.NET Standard 2.1、.NET Framework 4.8のAPIをターゲットとしている。<br>
複数の.NET TFM向けにコンパイルする場合、<code>Condition</code>属性には、実装固有のパッケージを含めることができる。<br>
<syntaxhighlight lang="xml">
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;net6.0;net48</TargetFrameworks>
  </PropertyGroup>
  <!-- Conditionally obtain references for the .NET Framework 6.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
    <Reference Include="System.Net" />
  </ItemGroup>
  <!-- Conditionally obtain references for the .NET Framework 4.8 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>
</Project>
</syntaxhighlight>
<br>
<syntaxhighlight lang="c#">
public class MyClass
{
    static void Main()
    {
#if NET48
      Console.WriteLine("Target framework: .NET Framework 4.8");
#elif NETSTANDARD2_1
      Console.WriteLine("Target framework: .NET Standard 2.1");
#elif NET60
      Console.WriteLine("Target framework: .NET 6.0");
#else
      Console.WriteLine("Target framework: etc");
#endif
    }
}
</syntaxhighlight>
<br>
サポートされるターゲットフレームワークのバージョンを表すプリプロセッサを、下表に示す。<br>
.NET Standard、.NET Core、.NET 5以降のTFMを表すプリプロセッサを使用する場合、ドットおよびハイフンをアンダースコアに置き換え、小文字を大文字に変更する。<br>
(例えば、netstandard 2.1のプリプロセッサは、<code>NETSTANDARD2_1</code>)<br>
<br>
これらのプリプロセッサは、<code>DisableImplicitFrameworkDefines</code>プロパティで無効にすることができる。<br>
<code>DisableImplicitFrameworkDefines</code>プロパティの詳細を知りたい場合は、[https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#disableimplicitframeworkdefines Microsoftの公式Webサイト]を参照すること。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;width:33%;" | ターゲットフレームワーク
! style="background-color:#66CCFF;width:33%;" | プリプロセッサ
! style="background-color:#66CCFF;width:34%;" | その他.NET 5以降で使用できるプリプロセッサ
|-
| .NET 5以降 および .NET Core
| NET<br>NET7_0<br>NET6_0<br>NET5_0<br>NETCOREAPP<br>NETCOREAPP3_1<br>NETCOREAPP3_0<br>NETCOREAPP2_2<br>NETCOREAPP2_1<br>NETCOREAPP2_0<br>NETCOREAPP1_1<br>NETCOREAPP1_0
| NET7_0_OR_GREATER<br>NET6_0_OR_GREATER<br>NET5_0_OR_GREATER<br>NETCOREAPP3_1_OR_GREATER<br>NETCOREAPP3_0_OR_GREATER<br>NETCOREAPP2_2_OR_GREATER<br>NETCOREAPP2_1_OR_GREATER<br>NETCOREAPP2_0_OR_GREATER<br>NETCOREAPP1_1_OR_GREATER<br>NETCOREAPP1_0_OR_GREATER
|-
| .NET Standard
| NETSTANDARD<br>NETSTANDARD2_1<br>NETSTANDARD2_0<br>NETSTANDARD1_6<br>NETSTANDARD1_5<br>NETSTANDARD1_4<br>NETSTANDARD1_3<br>NETSTANDARD1_2<br>NETSTANDARD1_1<br>NETSTANDARD1_0
| NETSTANDARD2_1_OR_GREATER<br>NETSTANDARD2_0_OR_GREATER<br>NETSTANDARD1_6_OR_GREATER<br>NETSTANDARD1_5_OR_GREATER<br>NETSTANDARD1_4_OR_GREATER<br>NETSTANDARD1_3_OR_GREATER<br>NETSTANDARD1_2_OR_GREATER<br>NETSTANDARD1_1_OR_GREATER<br>NETSTANDARD1_0_OR_GREATER
|-
| .NET Framework
| NETFRAMEWORK<br>NET48<br>NET472<br>NET471<br>NET47<br>NET462<br>NET461<br>NET46<br>NET452<br>NET451<br>NET45<br>NET40<br>NET35<br>NET20
| NET48_OR_GREATER<br>NET472_OR_GREATER<br>NET471_OR_GREATER<br>NET47_OR_GREATER<br>NET462_OR_GREATER<br>NET461_OR_GREATER<br>NET46_OR_GREATER<br>NET452_OR_GREATER<br>NET451_OR_GREATER<br>NET45_OR_GREATER<br>NET40_OR_GREATER<br>NET35_OR_GREATER<br>NET20_OR_GREATER
|}
</center>
<br>
ターゲットフレームワークは、通常、ターゲットフレームワークモニカー(TFM)により参照される。<br>
下表に、.NET SDKおよびNuGetクライアントによってサポートされるターゲットフレームワークを示す。<br>
<br>
同等のものが括弧内に示されている。 例えば、win81はnetcore451と同等のTFMである。<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ サポート対象のターゲット フレームワーク
|-
! style="background-color:#66CCFF;" | 対象とする Framework
! style="background-color:#66CCFF;" | TFM
|-
| .NET 5以降および.NET Core || netcoreapp1.0<br>netcoreapp1.1<br>netcoreapp2.0<br>netcoreapp2.1<br>netcoreapp2.2<br>netcoreapp3.0<br>netcoreapp3.1<br>net5.0<br>net6.0<br>net7.0
|-
| .NET Standard || netstandard1.0<br>netstandard1.1<br>netstandard1.2<br>netstandard1.3<br>netstandard1.4<br>netstandard1.5<br>netstandard1.6<br>netstandard2.0<br>netstandard2.1
|-
| .NET Framework || net11<br>net20<br>net35<br>net40<br>net403<br>net45<br>net451<br>net452<br>net46<br>net461<br>net462<br>net47<br>net471<br>net472<br>net48<br>
|-
| ユニバーサルWindowsプラットフォーム || uap (uap10.0)<br>uap10.0 (win10) (netcore50)
|-
| .NET Micro Framework || netmf
|-
| Windowsストア || netcore (netcore45)<br>netcore45 (win) (win8)<br>netcore451 (win81)
|}
</center>
<br>
TFMの詳細は、[https://docs.microsoft.com/ja-jp/dotnet/standard/frameworks Microsoftの公式Webサイト]を参照すること。<br>
<br><br>
== .NET 8の変更点 ==
.NET 8では、いくつかのアーキテクチャに関する重要な変更が導入された。<br>
特に、Linux環境での動作に影響を与える変更がある。<br>
<br>
* ネイティブAOT (Ahead-of-Time) コンパイルのサポートが強化されて、プラットフォーム固有の最適化がより重視された。
* クロスプラットフォームビルドの処理方法が改善されて、より厳密なプラットフォームチェックが導入された。
<br>
==== AnyCPUの扱いの変更 ====
* .NET 7以前
*: AnyCPUは、実行時に適切なプラットフォームを動的に選択される。
* .NET 8以降
*: 特にLinux環境では、より明示的なプラットフォーム指定が必要になるケースが増加した。
<br>
AnyCPUの取り扱いは、以下に示す目的で導入された。<br>
* より効率的なネイティブコード生成
* プラットフォーム固有の最適化の改善
* セキュリティとパフォーマンスの向上
* クロスプラットフォームビルドの信頼性向上
<br>
ただし、この動作は環境やプロジェクトの設定によって異なる場合がある。<br>
特にLinux環境では、システムのアーキテクチャとの互換性をより明示的に指定する必要がある。<br>
<br>
.NET 8以降では、プラットフォームの選択において、AnyCPUではなく<u>アーキテクチャ</u>あるいは<u>ターゲットプラットフォーム</u>を指定することが推奨される。<br>
<br>
<syntaxhighlight lang="xml">
<!-- 方法1: 明示的にx64を指定 -->
<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
</syntaxhighlight>
<br>
<syntaxhighlight lang="xml">
<!-- 方法2: ターゲットプラットフォームを指定 -->
<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>
</syntaxhighlight>
<br><br>
<br><br>
== VS Codeの拡張機能 ==
VS Codeでは、拡張機能をインストールすることにより、C#の機能を強化することができる。<br>
<br>
C#の開発におけるVS Codeの拡張機能を以下に示す。<br>
* [https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp C#]
*: この拡張機能は、シンタックスハイライティング、インテリセンス、定義への移動、すべての参照の検索などを追加します。また、C#アプリケーションのデバッグをサポートします。
*: デバッグについては、[https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger.md .NET Coreデバッガの設定方法]を参照することを推奨する。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=jchannon.csharpextensions C# Extensions]
*: C#のクラスやインターフェースを簡単に追加できる機能である。
*: この拡張機能は、クラスやインターフェイスのための新しいファイルの作成およびプロジェクトの名前空間を設定等を自動で行う。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=jorgeserrano.vscode-csharp-snippets C# Snippets]
*: C#のコードスニペットを多数収録している。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=k--kato.docomment C# XML Documentation Comments]
*: ソースコードにXMLコメントを追加する時、より快適な操作性を実現する機能である。
<br>
ASP.NET Coreの開発におけるVS Codeの拡張機能を以下に示す。<br>
* [https://marketplace.visualstudio.com/items?itemName=rahulsahay.Csharp-ASPNETCore ASP.NET Core Snippets]
*: ASP.NET Coreのコントローラやアクションを簡単に構築するためのスニペットを収録している。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=wilderminds.wilderminds-aspnetcore-snippets WilderMinds社のASP.NET Core Snippets]
*: ASP.NET Core Snippetsの代わりに、よく似たスニペットセットを収録している。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=schneiderpat.aspnet-helper ASP.NET Helper]
*: Razorのビューページ内にIntellisenseを追加する。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=abusaidm.html-snippets HTML Snippets]
*: HTMLスニペットに加えて、HTMLシンタックスハイライトのサポートを追加する。
*: ちなみに、VS Codeには[https://code.visualstudio.com/docs/languages/html#_emmet-snippets Emmet]が内蔵されており、HTMLのコーディングが非常に速くなる。
*: <br>
* [https://marketplace.visualstudio.com/items?itemName=Zignd.html-css-class-completion IntelliSense for CSS class names]
*: プロジェクト内のCSSクラス定義に基づいて、HTMLのclass属性にCSSクラス名を補完する。
<br>
その他<br>
* [https://marketplace.visualstudio.com/items?itemName=donjayamanne.git-extension-pack Git Extension Pack]
*: Gitにおける5つの拡張機能をインストールする拡張機能である。
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:SUSE]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2024年12月4日 (水) 04:58時点における最新版

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

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

vi ~/.profile


 # ~/.profileファイル
 
 export DOTNET_CLI_TELEMETRY_OPTOUT=1
 # または
 export DOTNET_CLI_TELEMETRY_OPTOUT=true


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


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

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

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

# RHEL
libicu  openssl openssl-libs krb5-server krb5-libs

# SUSE
libicu60_2 libicu-suse65_1 openssl openssl-1_1 libopenssl1_1 krb5


※注意
.NET Core 2.1以前のバージョンをインストールする場合、以下に示すライブラリもインストールする必要がある。

# RHEL
sudo dnf iinstall libunwind libuuid

# SUSE
sudo zypper install libunwind libuuid1


手動でインストール

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

# RHEL
sudo dnf install curl libcurl lttng-ust libicu  openssl openssl-libs krb5-server krb5-libs 

# 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

# Mobian
sudo apt install curl zlib1g liblttng-ust1 libicu72 openssl libssl3 libkrb5-3

# Manjaro ARM
sudo pacman -S --needed curl zlib lttng-ust icu openssl krb5


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

# RHEL
sudo dnf iinstall libunwind libuuid

# SUSE
sudo zypper install libunwind libuuid1



リポジトリの登録

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

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

# RHEL
# RHELに.NETをインストールするには、Red Hat Subscription Managerを使用して登録する必要がある
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm

# SLE 15
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

# openSUSE Leap 15
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


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

# RHEL
sudo dnf update

# SUSE
sudo zypper update


手動でインストール

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


.NET SDKのインストール

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

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

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

# RHEL
# .NETは、RHEL 9のAppStreamリポジトリに含まれている
sudo dnf install dotnet-sdk-X.0     # X : メジャーバージョン

# SUSE
sudo zypper install dotnet-sdk-X.0  # X : メジャーバージョン


手動でインストール

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

tar xf dotnet-sdk-<バージョン名>-linux-x64.tar.gz
mv dotnet-sdk-<バージョン名>-linux-x64 <任意のディレクトリ>


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

vi ~/.profile


 # ~/.profileファイル
 
 export PATH="<.NET SDKのインストールディレクトリ>:$PATH"



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

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

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

# RHEL
sudo dnf install aspnetcore-runtime-X.0     # X : メジャーバージョン

# SUSE
sudo zypper install aspnetcore-runtime-X.0  # X : メジャーバージョン


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

# RHEL
sudo dnf install dotnet-runtime-X.0     # X : メジャーバージョン

# SUSE
sudo zypper install dotnet-runtime-X.0  # X : メジャーバージョン


手動でインストール

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

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

mv runtime-<バージョン名>-linux-x64-binaries <任意のディレクトリ>


次に、~/.profileファイル等に、環境変数PATHを追記する。

vi ~/.profile


 # ~/.profileファイル
 
 export PATH="<.NETランタイムのインストールディレクトリ>:$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 <任意のディレクトリ>


次に、~/.profileファイル等に、環境変数PATHを追記する。

vi ~/.profile


 # ~/.profileファイル
 
 export PATH="<.NET Core SDK 3.1のインストールディレクトリ>:$PATH"


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

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

mv runtime-<バージョン名>-linux-x64-binaries <任意のディレクトリ>


次に、~/.profileファイル等に、環境変数PATHを追記する。

vi ~/.profile


 # ~/.profileファイル
 
 export PATH="<.NET Core ランタイムのインストールディレクトリ>:$PATH"



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

.NET Foundationが提供するインストールスクリプトを使用して、.NETの複数のバージョンをインストールできる。
または、以下に示すコマンドを実行して、インストールスクリプトをダウンロードすることもできる。

wget https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh


インストールシェルスクリプトのマニュアルは、Microsoftの公式Webサイトにある。

現在、Microsoftから配布されている.NET SDKのバージョンを確認する場合は、.NETの公式Webサイトを参照すること。

インストールシェルスクリプトに実行権限を付加する。

chmod u+x ./dotnet-install.sh


.NET SDKをインストールする。

  • --channelオプション
    • STS
      最新の標準期間サポートリリース。
    • LTS
      最新の長期サポートリリース。
    • 特定のリリースを表す A.B 形式の2部構成のバージョン
      8.0
    • 特定のSDKリリースを表す A.B.Cxx 形式の3部構成のバージョン
      8.0.3026.0.423
      .NET 5以降で使用できる。

  • -InstallDir <.NET SDKのインストールディレクトリ> または --install-dir <.NET SDKのインストールディレクトリ>
    .NET SDKのインストールディレクトリを指定する。
# 最新の.NET SDKをインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version latest

# .NET SDK 9.0.100をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel <STS または Current> -version 9.0.100

# .NET SDK 8.0.302 (LTS)をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version 8.0.302

# .NET SDK 6.0.403 (LTS)をインストールする場合
./dotnet-install.sh --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version 6.0.423


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

# 最新の.NET SDKのインストールをシミュレートする場合
./dotnet-install.sh -Dryrun --install-dir <.NET SDKのインストールディレクトリ> -channel LTS -version latest


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

dotnet --list-sdks



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

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

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

dotnet --list-sdks


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

 export SDK_VERSION="<.NET SDKのバージョン  例: 7.0.400>"; \
 export DOTNET_UNINSTALL_PATH="<.NET SDKのインストールディレクトリ>"
 
 rm -rf  "$DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION"


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

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

 export RUNTIME_VERSION="<.NETランタイムのバージョン  例 : 7.0.10>"; \
 export SDK_VERSION="<.NET SDKのバージョン  例 : 7.0.400>"
 
 cd <.NET SDKのインストールディレクトリ>
 
 rm -rf "host/fxr/$RUNTIME_VERSION"; \
 rm -rf "packs/Microsoft.AspNetCore.App.Ref/$RUNTIME_VERSION"; \
 rm -rf "packs/Microsoft.NETCore.App.Host.linux-x64/$RUNTIME_VERSION"; \
 rm -rf "packs/Microsoft.NETCore.App.Ref/$RUNTIME_VERSION"; \
 rm -rf "sdk/$SDK_VERSION"; \
 rm -rf "sdk-manifests/$RUNTIME_VERSION"; \
 rm -rf "shared/Microsoft.AspNetCore.All/$RUNTIME_VERSION"; \
 rm -rf "shared/Microsoft.AspNetCore.App/$RUNTIME_VERSION"; \
 rm -rf "shared/Microsoft.NETCore.App/$RUNTIME_VERSION"; \
 rm -rf "templates/$RUNTIME_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_8_SDK>"
 
 # テレメトリを無効にする場合
 export DOTNET_CLI_TELEMETRY_OPTOUT=1
 # または
 export DOTNET_CLI_TELEMETRY_OPTOUT=true



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

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


.NETランタイム / .NET SDKのアンインストール

.NET Core 2.1以降では、パッケージ管理システム(dnfaptzypper等)を使用してアップグレードする場合、.NETをアンインストールする必要はない。
なぜなら、パッケージ管理システムのupdateコマンドまたはrefreshコマンド等では、新しいバージョンが正常にインストールされる時、古いバージョンが自動的に削除されるからである。

パッケージ管理システムを使用して.NETランタイム / .NET SDKをインストールした場合は、パッケージ管理システムを使用して.NETランタイム / .NET SDKをアンインストールする。

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

# RHEL
sudo dnf remove dotnet-sdk-<バージョン> dotnet-runtime-<バージョン>
sudo dnf remove libunwind libicu libuuid

# SUSE
sudo zypper remove dotnet-sdk-<バージョン> dotnet-runtime-<バージョン>
sudo zypper remove libunwind libicu libuuid1


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

# RHEL
sudo dnf remove /etc/yum.repos.d/microsoft-prod.repo

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


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

# RHEL / SUSE
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



一時ファイルの自動生成の無効化

.NETを使用するとき、/tmpディレクトリ内にclr-debug-pipeファイル(パイプファイル)およびdotnet-diagnostic(ソケットファイル)ファイルが自動的に作成される。
これらのファイルの自動生成を抑制する場合、~/.profileファイル等に以下に示す設定を追記する。

vi ~/.profile


 # ~/.profileファイル
 
 # デバッガ、プロファイラ、EventPipeの診断を有効または無効にする
 # ただし、無効にする場合、デバッグ不可能となることに注意する
 # export COMPlus_EnableDiagnostics=0  # または、DOTNET_EnableDiagnostics=0
 
 export DOTNET_Diagnostics_LogDirectory="/dev/null"
 export DOTNET_Diagnostics_AutoSaveDump=false



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#プロジェクトのデバッグ

launch.json

下表に、launch.jsonファイルの設定の意味を示す。

属性 意味
preLaunchTask デバッグ実行前に行うタスクを指定する。
tasks.jsonファイルにあるtaskslabel属性の値を指定。
program 起動するプログラムのパスを指定する。
初期設定は、${workspaceFolder}/bin/Debug/netX.Y/<ターゲットプラットフォーム>/<C#プロジェクト名>.dll
args 実行ファイルに与える引数を指定する。
複数の引数を指定する場合は、カンマ(,)で区切る。
cwd プログラムの実行に使用するディレクトリを指定する。
初期設定は、${workspaceFolder}
console

デバッグ対象のプログラムを起動するコンソールの指定する。

  • internalConsole (デフォルト)
    VS Codeのデバッグコンソールを使用する。
  • externalTerminal
    ユーザが指定したターミナルを使用する。
  • integratedTerminal
    [ターミナル]パネルを使用する。
internalConsoleOptions
  • openOnFirstSessionStart (デフォルト)
    初回のデバッグセッション開始時のみデバッグコンソールを開く。
    その後は開いたコンソールが再利用される。
  • openOnSessionStart
    デバッグセッションが開始されるごとにデバッグコンソールを新規に開く。
  • neverOpen
    入力を許可する。(Console.Readlineメソッドを使用する場合等)
    また、デバッグコンソールを一切表示しない。
externalConsoleOptions

console属性がexternalTerminalの場合、設定が有効になる。

  • openOnFirstSessionStart (デフォルト)
    初回のデバッグセッション開始時のみデバッグコンソールを開く。
    その後は開いたコンソールが再利用される。
  • openOnSessionStart
    デバッグセッションが開始されるごとにデバッグコンソールを新規に開く。
  • neverOpen
    入力を許可する。(Console.Readlineメソッドを使用する場合等)
    また、デバッグコンソールを一切表示しない。
stopAtEntry
  • true
    プログラムをデバッグする場合、エントリポイントでデバッグを一時停止する。
    (プログラムの起動直後にデバッグ実行を中断する)


その他、下表のような属性が設定できる。

属性 意味
env 環境変数を指定する。
launchBrowser Webアプリケーションのデバッグを行う場合、起動するWebブラウザを指定する。
sourceFileMap ソースファイルのマッピングを指定する。
symbolPath シンボルパスを設定する。
justMyCode
  • true (デフォルト)
    設計者の記述したコードのみデバッグする。
  • false
    外部ライブラリも含めてデバッグする。
requireExactSource デバッグ実行しているプログラムと一致したpdbファイルおよびソースファイルを必要とする。
enableStepFiltering マネージコードのプロパティおよび演算子についてもステップ実行を行う。
logging 出力コンソールに出力するログの種類を指定する。
pipeTransport VS Codeとデバッガのバックエンドを接続するため、リモートコンピュータに接続する必要がある場合の設定を記述する。


入力の許可

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

まず、プロジェクトディレクトリの.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#プロジェクトのリリース

単一のTFM

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

# Linux Arch64向け TFMの指定
dotnet publish -c:Release -r:linux-arm64 -p:PublishReadyToRun=false -p:PublishSingleFile=true --self-contained false -f:<.NETのターゲットフレームワークのバージョン  例: net8.0>


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

  • -c:Release
    リリースビルド
    -c Releaseオプションは不要である。
    このオプションは、ソフトウェアのリリースビルドを公開することを明示するために提供されている。
    .NET Core SDK 3.1以降を使用する場合、dotnet publishコマンドを実行する時の既定の公開モードは、フレームワークに依存する実行可能ファイルである。

  • -r:<ターゲットプラットフォーム>
    • ターゲットプラットフォームは以下の通りである。
      win-x64 … ターゲットをWindows x64にする。
      win-x86 … ターゲットをWindows x86にする。
      win-arm64 … ターゲットをWindows AArch64にする。
      linux-x64 … ターゲットをLinux x64にする。
      linux-x86 … ターゲットをLinux x86にする。
      linux-musl-x64 … ターゲットをAlpine Linuxのようなmuslを使用した軽量ディストリビューションにする。
      linux-arm64 … ターゲットをLinux AArch64にする。
      linux-arm … ターゲットをLinux Arm32にする。
      linux-musl-arm64 … ターゲットをAArch64 Arm v8向けDockerイメージおよび最小限のベースイメージの構築に使用にする。
      linux-bionic-arm64 … ターゲットをAndroidのbionic libcを使用したLinuxディストリビューションにする。 例: Termux
      osx-arm64 … ターゲットをMacOS AArch64にする。
      osx-x64 … ターゲットをMacOS x64にする。
      android-arm64 … ターゲットをAndroidにする。
      ios-arm64 … ターゲットをiPhoneにする。

  • -p:PublishReadyToRun=true
    事前コンパイル方式にする。
    初回から起動速度が速くなる。ただし、ファイルサイズが少し大きくなる。

  • -p:PublishSingleFile=true (推奨)
    出力ファイルを1つの実行ファイルにまとめる。

    ただし、.NET 5以降では、単一の実行ファイルにする場合、使用できないAPIや動作が変化するAPIが存在する。(Assemblyのパスが取得できない等)
    代替手段も存在するため、以下に示すMicrosoftの公式Webサイトを参照すること。
    https://docs.microsoft.com/ja-jp/dotnet/core/deploying/single-file#api-incompatibility

  • --self-contained false (推奨)
    .NETランタイムを含めた単一の実行ファイルを生成する。
    実行環境に.NETランタイムがインストールされている必要がない。

  • -p:PublishTrimmed=true
    使用していない依存関係を削除する。
    アプリケーションサイズを削減できる。

  • -p:IncludeNativeLibrariesForSelfExtract=true
    ネイティブライブラリ (libHarfBuzzSharp.soやlibSkiaSharp.so等) を実行ファイルに組み込む。
    実行時に自動的に展開される。


※注意
PublishTrimmedオプションを使用する場合、リフレクションを使用しているコードに影響が出る可能性がある。
ただし、生成されるファイルサイズは大きくなるが、単一の実行ファイルで完結する。
SkiaSharpのような特殊なネイティブライブラリを使用している場合は、追加の設定が必要になることがある。

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

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


また、プロジェクトファイル(.csproj拡張子)を編集して、発行を指定することもできる。
これらのプロパティには、以下に示すエレメントがある。

  • PublishSingleFile
    単一ファイルの発行を有効にする。
    また、dotnet buildコマンド実行時の単一ファイルの警告を有効にする。

  • SelfContained
    発行するプロジェクトが自己完結型またはフレームワーク依存であるかを判断する。

    自己完結型としてソフトウェアを発行する時、プラットフォーム固有の実行可能ファイルが生成される。
    出力されるpublishディレクトリには、.NETライブラリやターゲットランタイム等のソフトウェアの全てのコンポーネントが格納される。
    この時、発行したソフトウェアは、他の.NETから分離されており、ローカルにインストールされた共有ランタイムを使用しない。
    そのため、発行したソフトウェアを使用するユーザは、.NETのダウンロードおよびインストールを行うことは不要となる。

  • RuntimeIdentifier
    ターゲットとするOSとアーキテクチャの種類を指定する。
    デフォルトでは、<SelfContained>true</SelfContained>が設定される。
    単一ファイルのプロジェクトは、常にOSとアーキテクチャに固有である。
    複数のOSおよびアーキテクチャを発行する場合は、linux-x64linux-arm64win10-x64等、構成ごとに発行する必要がある。
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <TargetFramework>net8.0</TargetFramework>
     <PublishSingleFile>true</PublishSingleFile>
     <SelfContained>true</SelfContained>
     <RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
   </PropertyGroup>
 
 </Project>


また、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"
 },
 
 // ...略
 
 ]


複数のTFM

複数のTFMを指定するプロジェクトをpulishする場合、標準のpublishコマンドでは失敗するが、
マルチターゲットを実行するカスタムターゲットを作成することができる。

これを行うには、ソリューションディレクトリ下にDirectory.Build.propsファイル、または、Directory.Build.targetsファイルを作成する。

vi Directory.Build.props
または
vi Directory.Build.targets


 <!--
 Directory.Build.propsファイル  または  Directory.Build.targetsファイル
 -->
 
 <Project>
   <Target Name="PublishProjectIfFrameworkSet"
          DependsOnTargets="Publish"
          Condition=" '$(TargetFramework)' != '' " />
 
   <Target Name="PublishProjectForAllFrameworksIfFrameworkUnset" Condition=" '$(TargetFramework)' == '' ">
     <ItemGroup>
       <_PublishFramework Include="$(TargetFrameworks)" />
     </ItemGroup>
     <MSBuild Projects="$(MSBuildProjectFile)" Targets="Publish" Properties="TargetFramework=%(_PublishFramework.Identity)" />
   </Target>
 
   <Target Name="PublishAll"
          DependsOnTargets="PublishProjectIfFrameworkSet;PublishProjectForAllFrameworksIfFrameworkUnset" />
 </Project>


ソリューションディレクトリ下で以下に示すコマンドを実行することにより、定義された全ての.NETを使用してビルドすることができる。

dotnet msbuild /t:PublishAll /p:Configuration=Release



プロジェクトのターゲッットフレームワークの指定

ターゲットフレームワークは、プロジェクトファイルで指定する。

単一のターゲットフレームワークを指定する場合、プロジェクトファイル (.csprojファイル) のTargetFrameworkエレメントに記述する。

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

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


複数のターゲットを指定する場合、プロジェクトファイル(.csproj)のTargetFrameworksエレメントにセミコロン(;)で囲んで記述する。
以下の例では、ターゲットを.NET Core 3.1、.NET 6、.NET 7に変更している。

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


また、各ターゲットフレームワークのアセンブリを条件付きで参照することができる。
if-elif-elseプリプロセッサを使用して、それらのアセンブリに対して条件付きでコンパイルすることもできる。

以下の例では、.NET 6、.NET Standard 2.1、.NET Framework 4.8のAPIをターゲットとしている。
複数の.NET TFM向けにコンパイルする場合、Condition属性には、実装固有のパッケージを含めることができる。

 <Project Sdk="Microsoft.NET.Sdk">
 
  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;net6.0;net48</TargetFrameworks>
  </PropertyGroup>
 
  <!-- Conditionally obtain references for the .NET Framework 6.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
    <Reference Include="System.Net" />
  </ItemGroup>
 
  <!-- Conditionally obtain references for the .NET Framework 4.8 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>
 
 </Project>


 public class MyClass
 {
    static void Main()
    {
 #if NET48
       Console.WriteLine("Target framework: .NET Framework 4.8");
 #elif NETSTANDARD2_1
       Console.WriteLine("Target framework: .NET Standard 2.1");
 #elif NET60
       Console.WriteLine("Target framework: .NET 6.0");
 #else
       Console.WriteLine("Target framework: etc");
 #endif
    }
 }


サポートされるターゲットフレームワークのバージョンを表すプリプロセッサを、下表に示す。
.NET Standard、.NET Core、.NET 5以降のTFMを表すプリプロセッサを使用する場合、ドットおよびハイフンをアンダースコアに置き換え、小文字を大文字に変更する。
(例えば、netstandard 2.1のプリプロセッサは、NETSTANDARD2_1

これらのプリプロセッサは、DisableImplicitFrameworkDefinesプロパティで無効にすることができる。
DisableImplicitFrameworkDefinesプロパティの詳細を知りたい場合は、Microsoftの公式Webサイトを参照すること。

ターゲットフレームワーク プリプロセッサ その他.NET 5以降で使用できるプリプロセッサ
.NET 5以降 および .NET Core NET
NET7_0
NET6_0
NET5_0
NETCOREAPP
NETCOREAPP3_1
NETCOREAPP3_0
NETCOREAPP2_2
NETCOREAPP2_1
NETCOREAPP2_0
NETCOREAPP1_1
NETCOREAPP1_0
NET7_0_OR_GREATER
NET6_0_OR_GREATER
NET5_0_OR_GREATER
NETCOREAPP3_1_OR_GREATER
NETCOREAPP3_0_OR_GREATER
NETCOREAPP2_2_OR_GREATER
NETCOREAPP2_1_OR_GREATER
NETCOREAPP2_0_OR_GREATER
NETCOREAPP1_1_OR_GREATER
NETCOREAPP1_0_OR_GREATER
.NET Standard NETSTANDARD
NETSTANDARD2_1
NETSTANDARD2_0
NETSTANDARD1_6
NETSTANDARD1_5
NETSTANDARD1_4
NETSTANDARD1_3
NETSTANDARD1_2
NETSTANDARD1_1
NETSTANDARD1_0
NETSTANDARD2_1_OR_GREATER
NETSTANDARD2_0_OR_GREATER
NETSTANDARD1_6_OR_GREATER
NETSTANDARD1_5_OR_GREATER
NETSTANDARD1_4_OR_GREATER
NETSTANDARD1_3_OR_GREATER
NETSTANDARD1_2_OR_GREATER
NETSTANDARD1_1_OR_GREATER
NETSTANDARD1_0_OR_GREATER
.NET Framework NETFRAMEWORK
NET48
NET472
NET471
NET47
NET462
NET461
NET46
NET452
NET451
NET45
NET40
NET35
NET20
NET48_OR_GREATER
NET472_OR_GREATER
NET471_OR_GREATER
NET47_OR_GREATER
NET462_OR_GREATER
NET461_OR_GREATER
NET46_OR_GREATER
NET452_OR_GREATER
NET451_OR_GREATER
NET45_OR_GREATER
NET40_OR_GREATER
NET35_OR_GREATER
NET20_OR_GREATER


ターゲットフレームワークは、通常、ターゲットフレームワークモニカー(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
net7.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サイトを参照すること。


.NET 8の変更点

.NET 8では、いくつかのアーキテクチャに関する重要な変更が導入された。
特に、Linux環境での動作に影響を与える変更がある。

  • ネイティブAOT (Ahead-of-Time) コンパイルのサポートが強化されて、プラットフォーム固有の最適化がより重視された。
  • クロスプラットフォームビルドの処理方法が改善されて、より厳密なプラットフォームチェックが導入された。


AnyCPUの扱いの変更

  • .NET 7以前
    AnyCPUは、実行時に適切なプラットフォームを動的に選択される。
  • .NET 8以降
    特にLinux環境では、より明示的なプラットフォーム指定が必要になるケースが増加した。


AnyCPUの取り扱いは、以下に示す目的で導入された。

  • より効率的なネイティブコード生成
  • プラットフォーム固有の最適化の改善
  • セキュリティとパフォーマンスの向上
  • クロスプラットフォームビルドの信頼性向上


ただし、この動作は環境やプロジェクトの設定によって異なる場合がある。
特にLinux環境では、システムのアーキテクチャとの互換性をより明示的に指定する必要がある。

.NET 8以降では、プラットフォームの選択において、AnyCPUではなくアーキテクチャあるいはターゲットプラットフォームを指定することが推奨される。

 <!-- 方法1: 明示的にx64を指定 -->
 
 <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <PlatformTarget>x64</PlatformTarget>
 </PropertyGroup>


 <!-- 方法2: ターゲットプラットフォームを指定 -->
 
 <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
 </PropertyGroup>



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つの拡張機能をインストールする拡張機能である。