言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

C#辞典

  1. トップページ
  2. C#辞典
  3. 【環境構築】C#の開発環境

【環境構築】C#の開発環境

C# でプログラムを書いて実行するには、.NET SDK(ソフトウェア開発キット)が必要です。ここでは SDK のインストールからプログラムの実行まで、手順を説明します。

.NET SDK のインストール

OSインストール方法
Windowsdotnet.microsoft.com からインストーラーをダウンロードして実行します。
macOSHomebrew で『brew install dotnet-sdk』を実行します。Homebrew はmacOS用のパッケージマネージャです。インストールされていない場合は公式サイト(https://brew.sh/)の手順に従ってインストールしてください。または公式サイトからインストーラーをダウンロードします。

インストーラーのダウンロードについて

公式サイトからインストーラーをダウンロードする場合、ページを開いた時点で OS やアーキテクチャは自動で判定されるはずです。『Download .NET SDK XXX』のようなボタンをクリックしてください。

.NET 公式ダウンロードページ

Windows のインストール手順

ダウンロードしたインストーラーをダブルクリックして実行します。

.NET SDK インストーラー

『インストール』をクリックするとインストールが始まります。

以下の画面は「はい」をクリックしてください。

UAC ダイアログ - Microsoft Corporation の発行元を確認して「はい」をクリック

以下の画面が出たらインストールは完了です。『閉じる』をクリックしてインストーラーを閉じてください。

.NET SDK インストール完了画面

Windows のインストール確認

PowerShell またはコマンドプロンプトを開いて以下を実行します。

dotnet --version
9.0.313

バージョン番号が表示されればインストール成功です。

macOS のインストール手順

ターミナルを開いて以下のコマンドを実行します。Homebrew がインストールされていない場合は公式サイト(https://brew.sh/)の手順に従ってインストールしてください。

brew install dotnet-sdk
==> Installing Cask dotnet-sdk
==> Running installer for dotnet-sdk with `sudo` (which may request your password)...
Password:
installer: Package name is Microsoft .NET SDK 10.0.201 (arm64)
installer: Upgrading at base path /
installer: The upgrade was successful.
==> Linking Binary 'dotnet' to '/opt/homebrew/bin/dotnet'
🍺  dotnet-sdk was successfully installed!

途中で管理者パスワードの入力を求められます(『Password:』と表示されます)。Mac のログインパスワードを入力して Enter を押してください。入力中は画面に何も表示されませんが、正常な動作です。

macOS のインストール確認

インストール後、ターミナルで以下を実行します。

dotnet --version
10.0.201

バージョン番号が表示されればインストール成功です。

ファイルの書き方やコメントの記述方法については『.csファイルの作成と実行方法』を参照してください。

テレメトリ(利用状況データの収集)を無効にする

.NET CLI(Command Line Interface — キーボードでコマンドを入力して操作する画面)は初回実行時にテレメトリ(利用状況データの収集)が有効になっている旨のメッセージを表示します。

テレメトリ
---------
.NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。
データは Microsoft によって収集され、コミュニティと共有されます。
テレメトリをオプトアウトするには、好みのシェルを使用して、
DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。

.NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry

データの収集を無効にしたい場合は、以下の環境変数を設定してください。

zsh の場合:

echo 'export DOTNET_CLI_TELEMETRY_OPTOUT=1' >> ~/.zshrc
source ~/.zshrc

bash の場合:

echo 'export DOTNET_CLI_TELEMETRY_OPTOUT=1' >> ~/.bashrc
source ~/.bashrc

Windows の場合は「システムの詳細設定」→「環境変数」で『DOTNET_CLI_TELEMETRY_OPTOUT』を『1』に設定します。

プロジェクトの作成と実行

C# ではプロジェクト単位でプログラムを管理します。『dotnet』コマンドでプロジェクトの作成から実行まで行えます。

1. プロジェクトを作成します

dotnet new console -n HelloApp
The template "Console App" was created successfully.

『dotnet new console』はコンソールアプリ(CUI アプリケーション)のテンプレートを作成するコマンドです。『console』は GUI を持たない、ターミナル上で動作するプログラムを意味します。『-n HelloApp』でプロジェクト名を指定します。実行すると現在のディレクトリに『HelloApp』ディレクトリが作成され、その中にファイルが生成されます。『-n』を省略した場合は新しいディレクトリは作られず、現在のディレクトリに直接ファイルが生成されます(ディレクトリ名がプロジェクト名になります)。たとえばデスクトップで実行するとプロジェクト名が『Desktop』になってしまうため、『-n』でプロジェクト名を指定することをおすすめします。

作成された HelloApp ディレクトリに移動します。

cd HelloApp

作成されるファイル構成は以下のとおりです。

📁 HelloApp/ Program.cs ← メインのソースファイル HelloApp.csproj ← プロジェクト設定 📁 bin/ ← ビルド結果(自動生成) 📁 obj/ ← ビルドキャッシュ(自動生成)

ファイル / ディレクトリ説明
Program.csメインのソースファイルです。ここにコードを書きます。
HelloApp.csprojプロジェクトの設定ファイルです。詳細は『設定ファイル一覧』を参照してください。
bin/ビルド結果(DLL ファイル等)が格納されるディレクトリです。『dotnet build』や『dotnet run』を実行すると自動生成されます。
obj/.NET が内部的に使用するビルドキャッシュのディレクトリです。自動生成されるため、手動で編集する必要はありません。

2. ソースコードを確認・編集します

自動生成された『Program.cs』を開くと、以下のようなコードが書かれています。

Console.WriteLine("Hello, World!");

好きなように書き換えてみましょう。

Console.WriteLine("五条悟");
Console.WriteLine("両面宿儺");

3. 実行します

dotnet run
五条悟
両面宿儺

コンソールに『五条悟』と『両面宿儺』が表示されれば成功です。

エディタ・IDE(Integrated Development Environment — コード編集・実行・デバッグを1つにまとめた開発ツール)の選択

ツール概要
Visual StudioMicrosoft の統合開発環境です。Windows では Community 版が無料で使えます。デバッグ機能やコード補完が充実しています。
VSCode軽量なエディタです。C# Dev Kit 拡張機能をインストールすると、コード補完やデバッグが使えるようになります。正式名は『Visual Studio Code』。
RiderJetBrains製のC#/.NET専用IDEです。高度なコード解析・リファクタリング・デバッグ機能を備えています。Windows・macOS・Linux 対応。有料。

まずはコマンドラインで『dotnet run』の流れに慣れてから、好みのエディタを選ぶとよいでしょう。

よく使う dotnet コマンド

コマンド説明
dotnet new consoleコンソールアプリ(ターミナル上で動作するプログラム)のプロジェクトを作成します。
dotnet new webWeb アプリケーションのプロジェクトを作成します。
dotnet new classlibクラスライブラリ(他のプロジェクトから参照される DLL)のプロジェクトを作成します。
dotnet runプロジェクトをビルドして実行します。通常の開発ではこちらを使います。
dotnet buildプロジェクトをビルドします(実行はしません)。ビルド結果は『bin/Debug/』以下に DLL ファイルとして生成され、『dotnet bin/Debug/net10.0/プロジェクト名.dll』で実行できます。
dotnet build -c Release最適化された Release ビルドを生成します(後述)。『dotnet bin/Release/net10.0/プロジェクト名.dll』で実行できます。
dotnet publish -c Release本番公開用のファイルを生成します(後述)。
dotnet testテストプロジェクトを実行します。
dotnet add reference他のプロジェクトへの参照を追加します。クラスライブラリを利用する際に使います。

『dotnet new』のテンプレート(console / web / classlib)によって、最初に生成されるファイルとプロジェクト設定(.csproj)が異なります。『dotnet build』や『dotnet run』などのコマンドはどのテンプレートでも共通です。

コマンド用途SDKOutputTypeエントリポイントdotnet run
dotnet new consoleCUI アプリMicrosoft.NET.SdkExeMain メソッドターミナルで実行
dotnet new webWeb アプリMicrosoft.NET.Sdk.WebExeMain メソッドローカルに Web サーバーが起動(http://localhost:5000 等)
dotnet new classlibライブラリMicrosoft.NET.SdkLibraryなし実行不可(参照専用)
用語説明
SDKプロジェクトの種類を定義する設定です。.csproj ファイルの先頭に記述されます。『Microsoft.NET.Sdk.Web』は Web 開発用のライブラリやツールが追加で含まれます。
OutputTypeビルド結果の出力形式を指定する .csproj の設定です。『Exe』は実行可能ファイル、『Library』は他のプロジェクトから参照される DLL を生成します。なお『Exe』は設定値の名前であり、Windows の .exe ファイルが生成されるわけではありません。実際のビルド結果はどの OS でも DLL ファイル(.dll)として生成され、『dotnet プロジェクト名.dll』で実行します。
エントリポイントプログラムの実行開始地点です。C# では『Main』メソッドがエントリポイントになります。classlib(ライブラリ)は単体で実行しないためエントリポイントはありません。

『dotnet build』を実行すると、ビルド結果はプロジェクトディレクトリ内の『bin/』以下に生成されます。Linux の『/bin』(システムのバイナリ置き場)ではなく、『HelloApp/bin/』のようにプロジェクトディレクトリ直下の『bin/』です。Debug ビルドと Release ビルドはそれぞれ別のディレクトリに格納されます。『net10.0』の部分はインストールされている .NET SDK のバージョンによって変わります(例: .NET 8 なら『net8.0』)。

📁 HelloApp/bin/ 📁 Debug/ 📁 net10.0/ HelloApp.dll ← dotnet build で生成 📁 Release/ 📁 net10.0/ HelloApp.dll ← dotnet build -c Release で生成

Debug ビルドと Release ビルドの違い

Debug ビルド(既定)Release ビルド
用途開発・デバッグ用本番・配布用
コマンドdotnet builddotnet build -c Release
実行速度遅い(最適化なし)速い(最適化あり)
デバッグ情報あり(エラーの行番号等がわかる)なし(削除される)
出力先bin/Debug/bin/Release/

開発中は Debug ビルドで動作確認を行い、完成したら Release ビルドで本番用のファイルを生成する、という流れが一般的です。通常の開発では『dotnet run』がビルドと実行を一度に行うため、『bin/』の中身を意識する必要はありません。

Web アプリの作成と実行(dotnet new web)

『dotnet new web』を使うと、ローカルで Web サーバーを起動してブラウザで動作確認ができる Web アプリケーションプロジェクトを作成できます。

1. プロジェクトを作成します

dotnet new web -n HelloWeb

実行すると現在のディレクトリに『HelloWeb』ディレクトリが作成され、以下のファイルが生成されます。

📁 HelloWeb/ Program.cs ← メインのソースファイル HelloWeb.csproj ← プロジェクト設定 appsettings.json ← アプリの設定ファイル appsettings.Development.json ← 開発環境用の設定ファイル 📁 obj/ ← ビルドキャッシュ(自動生成) 📁 Properties/ launchSettings.json ← 起動設定(ポート番号等)

ファイル / ディレクトリ説明
Program.csメインのソースファイルです。ここにルーティングやアプリの処理を記述します。
HelloWeb.csprojプロジェクトの設定ファイルです。SDK の種類やターゲットフレームワークが記述されています。
appsettings.jsonアプリケーションの設定ファイルです。ログレベルなどの共通設定を記述します。
appsettings.Development.json開発環境専用の設定ファイルです。本番環境には影響しません。appsettings.json の設定を上書きできます。
obj/.NET が内部的に使用するビルドキャッシュのディレクトリです。自動生成されるため、手動で編集する必要はありません。
Properties/launchSettings.json開発時の起動設定ファイルです。ローカルサーバーのポート番号や環境変数などが記述されています。

作成された HelloWeb ディレクトリに移動します。

cd HelloWeb

2. ソースコードを確認・編集します

自動生成された『Program.cs』を開くと、以下のようなコードが書かれています。

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

『app.MapGet("/", ...)』は、ブラウザで『/』(トップページ)にアクセスしたときの処理を定義しています。表示する文字列を変更してみましょう。

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "大丈夫、僕最強だから。");

app.Run();

3. 実行します

dotnet run

以下のようなメッセージが表示されます。

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5249
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.

表示された URL(この例では『http://localhost:5249』)をブラウザで開きます。ポート番号は環境によって異なります。

ブラウザに『大丈夫、僕最強だから。』と表示されれば成功です。

サーバーを停止するには、ターミナルで『Ctrl + C』を押します。

クラスライブラリの作成(dotnet new classlib)

『dotnet new classlib』は、他のプロジェクトから参照して使うライブラリ(DLL)を作成するためのテンプレートです。ライブラリは単体では実行できません。

1. プロジェクトを作成します

dotnet new classlib -n MyLibrary

実行すると現在のディレクトリに『MyLibrary』ディレクトリが作成され、以下のファイルが生成されます。

📁 MyLibrary/ Class1.cs ← デフォルトのクラスファイル MyLibrary.csproj ← プロジェクト設定 📁 obj/ ← ビルドキャッシュ(自動生成)

ファイル / ディレクトリ説明
Class1.csデフォルトで生成されるクラスファイルです。名前は自由に変更できます。
MyLibrary.csprojプロジェクトの設定ファイルです。OutputType が『Library』に設定されています。
obj/.NET が内部的に使用するビルドキャッシュのディレクトリです。自動生成されるため、手動で編集する必要はありません。

2. ソースコードを編集します

自動生成された『Class1.cs』を開き、ライブラリとして公開するクラスやメソッドを記述します。

Class1.cs
namespace MyLibrary;

public class Greeting
{
    public static string GetMessage()
    {
        return "大丈夫、僕最強だから。";
    }
}

3. ビルドします

ライブラリは単体では実行できないため、『dotnet run』ではなく『dotnet build』でビルドします。

cd MyLibrary
dotnet build

ビルドが成功すると『bin/Debug/net10.0/MyLibrary.dll』が生成されます。

4. 他のプロジェクトから参照します

作成したライブラリをコンソールアプリなどから利用するには、参照を追加します。参照元のプロジェクトディレクトリ(HelloApp)に移動し、参照先のライブラリの『.csproj』ファイルをパスで指定します。

cd ../HelloApp
dotnet add reference ../MyLibrary/MyLibrary.csproj

参照を追加すると、HelloApp の .csproj に以下の記述が自動で追加されます。

<ItemGroup>
  <ProjectReference Include="..\MyLibrary\MyLibrary.csproj" />
</ItemGroup>

なお、この記述を .csproj に直接書いても同じ結果になります。

『Program.cs』からライブラリのクラスを呼び出します。

Program.cs
using MyLibrary;

Console.WriteLine(Greeting.GetMessage());
dotnet run
大丈夫、僕最強だから。

ライブラリのメソッドが呼び出され、『大丈夫、僕最強だから。』が表示されれば成功です。

本番公開(dotnet publish)

開発が完了したプロジェクトを本番環境にデプロイするには、『dotnet publish』コマンドでリリース用のファイルを生成します。

コンソールアプリの公開

プロジェクトディレクトリで以下を実行します。

dotnet publish -c Release

『HelloApp/bin/Release/net10.0/publish/』ディレクトリにデプロイ用のファイルが生成されます。

📁 HelloApp/bin/Release/net10.0/publish/ HelloApp.dll ← アプリ本体 HelloApp.runtimeconfig.json ← ランタイム設定 HelloApp.deps.json ← 依存関係情報

『publish/』ディレクトリの中身をまるごと配布先にコピーし、以下のコマンドで実行します。DLL 単体では動作しません。複数のファイルが同時に必要なため、zip などで圧縮したものを配布するのが一般的です。

『dotnet add reference』でクラスライブラリを参照している場合、『dotnet publish』の出力にはライブラリのビルド先が別ディレクトリに表示されます。

dotnet publish -c Release
  MyLibrary net10.0 成功しました (0.2 秒) → /Users/username/Desktop/MyLibrary/bin/Release/net10.0/MyLibrary.dll
  HelloApp net10.0 成功しました (0.1 秒) → bin/Release/net10.0/publish/

この出力を見ると、MyLibrary.dll は HelloApp とは別のディレクトリに書き出されているように見えますが、ビルドされたライブラリ DLL は自動的に publish ディレクトリにもコピーされます。手動でコピーする必要はありません。たとえば HelloApp が MyLibrary を参照している場合、publish ディレクトリには以下のように両方の DLL が含まれます。

📁 HelloApp/bin/Release/net10.0/publish/ HelloApp.dll ← アプリ本体 MyLibrary.dll ← 自動で含まれる

dotnet HelloApp.dll

なお、配布先(ユーザーの PC)で『$ dotnet XXX』の形式で実行させる場合は、配布先にも.NET ランタイムがインストールされている必要があります。ランタイムとは、プログラムを実行するために必要なソフトウェアのことです。開発には SDK(ランタイム+開発ツール)が必要ですが、実行だけならランタイムのみで動作します。

配布先にランタイムをインストールしてもらうのが難しい場合は、『--self-contained』オプションを使うとランタイムごとバンドルして配布できます。

dotnet publish -c Release --self-contained -r osx-arm64

『-r』はターゲットのプラットフォーム、つまり OS と CPU(Central Processing Unit — コンピュータの演算処理を行う中央演算装置)アーキテクチャの組み合わせを指定します。主な指定値は以下のとおりです。

対象
osx-arm64macOS(Apple Silicon)
osx-x64macOS(Intel)
win-x64Windows(64bit)
linux-x64Linux(64bit)

『--self-contained』で publish すると、『bin/Release/net10.0/osx-arm64/publish/』のように『-r』で指定したプラットフォーム名がパスに入ります。このディレクトリにネイティブの実行ファイル(『HelloApp』や Windows の『HelloApp.exe』)が生成され、『dotnet』コマンドなしで直接実行できます。ただし、ランタイムのDLLやライブラリが大量(200個前後)に publish ディレクトリに書き出されます。実行ファイル1つだけが生成されるわけではないので注意してください。

cd bin/Release/net10.0/osx-arm64/publish
./HelloApp
大丈夫、僕最強だから。

実行ファイルを本当に1つにまとめたい場合は、『-p:PublishSingleFile=true』を追加します。

dotnet publish -c Release --self-contained -r osx-arm64 -p:PublishSingleFile=true

これにより、ランタイムを含むすべてのファイルが1つの実行ファイルにパッケージされます。

📁 HelloApp/bin/Release/net10.0/osx-arm64/publish/ HelloApp ← 実行ファイル(約80MB) HelloApp.pdb ← デバッグ用(配布不要) MyLibrary.pdb ← デバッグ用(配布不要)

実行に必要なのは実行ファイル(『HelloApp』や Windows の『HelloApp.exe』)だけです。『.pdb』はデバッグ用のファイルのため、配布には不要です。Windows の場合はダブルクリックするだけで実行できます。

cd bin/Release/net10.0/osx-arm64/publish
./HelloApp
大丈夫、僕最強だから。

なお、self-contained ではランタイム全体が実行ファイルに含まれるため、シンプルなプログラムでも数十MBになります。参考として、C 言語で同じ処理を書いた場合のバイナリサイズは数十KB程度です。これは C# の実行ファイルに .NET ランタイム(ガベージコレクション・型システム・標準ライブラリ等)が丸ごとバンドルされているためです。

Web アプリの公開

Web アプリをサーバーにデプロイする場合は、サーバーに .NET ランタイム(または SDK)がインストールされているのが前提です。サーバーで .NET を使う以上ランタイムは必ず入っているため、『--self-contained』は不要です。コンソールアプリと同様に『dotnet publish』でリリース用ファイルを生成します。

デプロイ方法は主に2つあります。

方法1: ローカルで publish してサーバーに転送する

dotnet publish -c Release
scp -r bin/Release/net10.0/publish/ user@server:/var/www/app/

方法2: サーバーで git pull して publish する

git pull
dotnet publish -c Release

デプロイ用ファイルがある場所へ移動し、以下のコマンドで起動します。

dotnet HelloWeb.dll

サーバーで .NET アプリを公開する場合、一般的には Nginx や Apache などの Web サーバーをリバースプロキシとして配置し、その背後で『dotnet HelloWeb.dll』を起動する構成にします。

例えば PHP の場合は Apache が直接 PHP ファイルを実行しますが、.NET の仕組みは異なります。.NET の Web アプリは内蔵 Web サーバー『Kestrel(ケストレル)』を持っており、『dotnet HelloWeb.dll』を実行すると常駐プロセスとして起動します。Nginx や Apache は外部からのリクエストを Kestrel に転送する役割(リバースプロキシ)を担います。

PHP.NET(C#)
実行方式Apache が直接 PHP ファイルを実行『dotnet HelloWeb.dll』が常駐プロセスとして起動
Web サーバーApache / Nginx が直接処理内蔵サーバー Kestrel が処理(Apache / Nginx はリバースプロキシ)
プロセスリクエストごとに PHP が動作アプリが常に起動して待機

Node.js の Express や Python の Django と同じ構成です。クラウドサービス(Azure App Service、AWS Elastic Beanstalk 等)を利用する場合は、『dotnet publish』の出力をそのままデプロイできます。

『dotnet HelloWeb.dll』は常駐プロセスのため、デプロイ時は一度停止して再起動する必要があります。本番環境では systemd でサービスとして登録し、『systemctl restart myapp』のように管理するのが一般的です。

systemd のサービス設定例(/etc/systemd/system/myapp.service)
[Unit]
Description=My .NET Web App

[Service]
WorkingDirectory=/var/www/app/publish
ExecStart=/usr/bin/dotnet /var/www/app/publish/HelloWeb.dll
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

デプロイ時はアプリを再起動します。

sudo systemctl restart myapp

テストの作成と実行(dotnet test)

『dotnet test』はテストプロジェクトを実行するコマンドです。テストプロジェクトとは、プログラムの動作が正しいかを自動で検証するためのコードをまとめたプロジェクトです。値が期待どおりか、型が正しいか、条件を満たしているかなど、さまざまなチェックを記述できます。C# では、テストを別プロジェクトとして作成し、本体のプロジェクトを参照してテストを行います。

1. テストプロジェクトを作成します

テスト用のプロジェクトテンプレートはいくつかありますが、ここでは標準的な『xUnit』を使います。

dotnet new xunit -n HelloApp.Tests

実行すると『HelloApp.Tests』ディレクトリが作成されます。

📁 HelloApp.Tests/ UnitTest1.cs ← テストファイル HelloApp.Tests.csproj ← テスト用プロジェクト設定 📁 obj/ ← ビルドキャッシュ(自動生成)

2. テスト対象のプロジェクトを参照します

テストプロジェクトから本体のプロジェクトを参照します。

cd HelloApp.Tests
dotnet add reference ../HelloApp/HelloApp.csproj

3. テスト対象のクラスを用意します

HelloApp に以下のようなクラスがあるとします。

Calculator.cs
namespace HelloApp;

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

4. テストを記述します

『UnitTest1.cs』を開き、テストコードを記述します。

UnitTest1.cs
using HelloApp;

namespace HelloApp.Tests;

public class CalculatorTest
{
    [Fact]
    public void Add_ReturnsCorrectSum()
    {
        int result = Calculator.Add(3, 5);
        Assert.Equal(8, result);
    }

    [Fact]
    public void Multiply_ReturnsCorrectProduct()
    {
        int result = Calculator.Multiply(4, 6);
        Assert.Equal(24, result);
    }
}
要素説明
[Fact]テストメソッドであることを示す属性です。『dotnet test』で自動的に検出・実行されます。
Assert.Equal(期待値, 実際の値)2つの値が一致するかを検証します。一致しない場合、テストが失敗します。

5. テストを実行します

dotnet test

テストが成功すると以下のように表示されます。

Passed!  - Failed:     0, Passed:     2, Skipped:     0, Total:     2

テストが失敗した場合は、どのテストが失敗したか・期待値と実際の値が何だったかが表示されます。

Failed!  - Failed:     1, Passed:     1, Skipped:     0, Total:     2

  Failed CalculatorTest.Multiply_ReturnsCorrectProduct
  Expected: 24
  Actual:   20

テストフレームワークには xUnit のほかに『NUnit』や『MSTest』もあります。いずれも『dotnet test』で実行できます。

フレームワークテンプレート作成コマンド特徴
xUnitdotnet new xunit.NET の標準的なテストフレームワークです。シンプルで広く使われています。
NUnitdotnet new nunitJava の JUnit に影響を受けたフレームワークです。豊富なアサーション機能があります。
MSTestdotnet new mstestMicrosoft 公式のテストフレームワークです。Visual Studio との統合が強力です。

設定ファイル一覧

.NET プロジェクトでは用途に応じた設定ファイルが使われます。以下に主要な設定ファイルとその役割をまとめます。

.csproj(プロジェクト設定)

プロジェクトの基本設定を記述する XML ファイルです。SDK の種類、ターゲットフレームワーク、依存パッケージなどを管理します。

HelloApp.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
  </PropertyGroup>

</Project>
HelloWeb.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
  </PropertyGroup>

</Project>
設定項目説明
Sdkプロジェクトの種類を定義します。Web アプリは『Microsoft.NET.Sdk.Web』を使用します。
OutputType出力形式です。『Exe』は実行可能、『Library』はライブラリ。Web は省略可能です(既定で Exe)。
TargetFramework対象の .NET バージョンです。インストールした SDK に合わせます。

appsettings.json(アプリ設定)

アプリケーションの動作設定を JSON で記述します。Web アプリで自動生成されます。

appsettings.json
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

『appsettings.Development.json』は開発環境専用の設定ファイルで、appsettings.json の設定を上書きします。本番環境には影響しません。

launchSettings.json(起動設定)

開発時のローカルサーバーの起動設定を記述します。『Properties/』ディレクトリ内に配置されます。

Properties/launchSettings.json
{
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "applicationUrl": "http://localhost:5249",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

『applicationUrl』がローカルサーバーの URL です。ポート番号はプロジェクト作成時にランダムに割り当てられます。

global.json(SDK バージョン固定)

プロジェクトで使用する .NET SDK のバージョンを固定したい場合に、プロジェクトのルートに配置します。チームで開発環境を統一するときに使います。自動生成はされないため、必要な場合のみ手動で作成します。

global.json
{
  "sdk": {
    "version": "10.0.201"
  }
}

nuget.config(パッケージソース設定)

NuGet パッケージ(外部ライブラリ)の取得先を設定するファイルです。通常は既定の nuget.org から取得するため、設定不要です。社内のプライベートパッケージソースを利用する場合などに使います。

.sln(ソリューションファイル)

複数のプロジェクトをまとめて管理するためのファイルです。小規模な開発では不要ですが、Web アプリとライブラリを一緒に管理する場合などに使います。以下のコマンドで作成できます。

dotnet new sln -n MySolution
dotnet sln add HelloApp/HelloApp.csproj

コマンドが見つからないとき

ターミナルで『dotnet: command not found』と表示される場合は、PATH(パス)が通っていない可能性があります。以下の手順で確認・設定してください。

1. コマンドの場所を探します

コマンドの場所を確認します。

which dotnet

見つからない場合、よくあるインストール先を確認します。

ls /usr/local/share/dotnet/dotnet
ls ~/.dotnet/dotnet

2. 使用しているシェルを確認します

echo $SHELL

『/bin/zsh』と表示されたら『~/.zshrc』、『/bin/bash』と表示されたら『~/.bashrc』に設定を書きます。

3. PATH に追加します

コマンドの場所がわかったら、シェルの設定ファイルに PATH を追加します。

macOS (zsh) の場合:

echo 'export DOTNET_ROOT="/usr/local/share/dotnet"' >> ~/.zshrc
echo 'export PATH="$DOTNET_ROOT:$PATH"' >> ~/.zshrc
source ~/.zshrc

Linux (bash) の場合:

echo 'export DOTNET_ROOT="/usr/local/share/dotnet"' >> ~/.bashrc
echo 'export PATH="$DOTNET_ROOT:$PATH"' >> ~/.bashrc
source ~/.bashrc

『DOTNET_ROOT』は .NET SDK のインストール先を指す環境変数です。一部のツールが参照するため、PATH と合わせて設定しておくとよいでしょう。

Windows の場合は「システムの詳細設定」→「環境変数」→「Path」に追加します。通常はインストーラが自動的に設定しますが、手動インストールした場合は確認してください。

.NET SDK のアンインストール

Homebrew でインストールした場合:

brew uninstall dotnet-sdk

公式インストーラーでインストールした場合(macOS):

sudo rm -rf /usr/local/share/dotnet
sudo rm -rf /etc/paths.d/dotnet

Windows の場合は「設定」→「アプリ」→「インストールされているアプリ」から『.NET SDK』を選択してアンインストールします。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。