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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
15行目: 15行目:
==== パッケージ管理システムからインストール ====
==== パッケージ管理システムからインストール ====
パッケージ管理システムを使用してインストールする場合、以下のライブラリが自動的にインストールされる。<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 libuuid1
# SUSE
sudo zypper install libunwind libuuid1
<br>
<br>
==== 手動でインストール ====
==== 手動でインストール ====
手動で.NETをインストールする場合および自己完結型ソフトウェアを公開する場合は、以下の依存関係のライブラリをインストールする。<br>
手動で.NETをインストールする場合および自己完結型ソフトウェアを公開する場合は、以下の依存関係のライブラリをインストールする。<br>

2023年12月2日 (土) 07:38時点における版

.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 libuuid1

# SUSE
sudo zypper install libunwind libuuid1


手動でインストール

手動で.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が提供するインストールシェルスクリプトを使用して、.NETの複数のバージョンをインストールできる。

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

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

chmod u+x ./dotnet-install.sh


.NET SDKをインストールする。
currentチャネルからSTSチャネルに変更されたことに注意する。

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

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

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


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

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


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

dotnet --list-sdks



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

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)を完全にアンインストールしている。

DOTNET_VERSION="<.NETのバージョン  例 : 5.0.12>"
SDK_VERSION="<.NET SDKのバージョン  例 : 5.0.403>"

cd <.NET SDKのインストールディレクトリ>

rm -rf host/fxr/$DOTNET_VERSION
rm -rf packs/Microsoft.AspNetCore.App.Ref/$DOTNET_VERSION
rm -rf packs/Microsoft.NETCore.App.Host.linux-x64/$DOTNET_VERSION
rm -rf packs/Microsoft.NETCore.App.Ref/$DOTNET_VERSION
rm -rf sdk/$SDK_VERSION
rm -rf sdk-manifests/$DOTNET_VERSION
rm -rf shared/Microsoft.AspNetCore.All/$DOTNET_VERSION
rm -rf shared/Microsoft.AspNetCore.App/$DOTNET_VERSION
rm -rf shared/Microsoft.NETCore.App/$DOTNET_VERSION
rm -rf templates/$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



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

.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#プロジェクトのリリース

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つの実行ファイルにまとめる。

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



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

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

単一のターゲットフレームワークを指定する場合、プロジェクトファイル(.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サイトを参照すること。


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