# .NET SDK

# 1 概要

.NET SDK は、C# などの言語でアプリケーションやライブラリを開発するためのツールセットです。`dotnet` コマンドによりビルド・テスト・公開などの操作を行います。Visual Studio がなくてもコマンドラインを用いて開発できます。

現代の .NET (Windows 専用であった .NET Framework とは異なる統合プラットフォーム) は、クロスプラットフォームを前提として設計されています。同一のソースコードから、Linux / Windows / macOS 向けに同等の機能を持つ実行体を生成できる点が大きな特徴です。これにより、OS ごとの差異を最小限に抑えた開発・ビルド・テストが可能になります。

このリポジトリの `prod/calc.net/` は C ライブラリ (`libcalc`) を .NET から利用するためのラッパーライブラリとサンプルアプリケーションです。`CalcLib` が C ライブラリへの .NET インターフェースを提供し、`CalcApp` がそれを利用するサンプルアプリです。ビルドは `makefw/` が提供する makefile テンプレートで `dotnet build` コマンドとして実行され、Linux と Windows で同一機能を提供します。

`Directory.Build.props` (リポジトリルートに配置) により、複数の .NET プロジェクトに共通のビルド設定を適用しています。また、`RelWithDebInfo` (Release with Debug Information) ビルド設定を使用した最適化とデバッグ情報の共存についても理解が必要です。

なお、.NET に関する内容は、本リポジトリにおいて C と .NET の相互運用 (interop) を理解するための学習資料として位置付けています。C のみを用いた開発を対象とする場合、これらの章は参考情報として扱って問題ありません。

# 2 習得目標

- `dotnet build`・`dotnet run`・`dotnet test` などの基本コマンドを実行できる
- `.csproj` ファイルの基本構造 (`<Project>`・`<PropertyGroup>`・`<ItemGroup>`) を読み取れる
- `Directory.Build.props` による共通設定の仕組みを理解できる
- `dotnet publish` で実行可能な成果物を生成できる
- `<ProjectReference>` によるプロジェクト参照を理解できる
- `TargetFramework` (`net8.0` など) の意味を理解できる

# 3 学習マテリアル

## 3.1 公式ドキュメント

- dotnet コマンドリファレンス - `dotnet build`・`dotnet run`・`dotnet test` などのリファレンス (日本語)
- Directory.Build.props の使用 - 共通ビルドプロパティのカスタマイズ (日本語)
- .NET Standard の概要 - .NET バージョンと互換性 (日本語)

## 3.2 チュートリアル・入門

- .NET チュートリアル - Hello World - VS Code で .NET アプリを作成 (日本語)
- xUnit による単体テスト - .NET テストの入門 (日本語)

# 4 このリポジトリとの関連

## 4.1 使用箇所 (具体的なファイル・コマンド)

プロジェクト構成:

    prod/calc.net/
    +-- libsrc/CalcLib/CalcLib.csproj      # C ライブラリの .NET ラッパー
    +-- src/CalcApp/CalcApp.csproj         # サンプルアプリケーション

`Directory.Build.props` (ルートの共通設定):

    <Project>
      <PropertyGroup>
        <!-- すべての .NET プロジェクトに適用される共通設定 -->
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
    </Project>

基本的なビルドコマンド:

    dotnet build prod/calc.net/libsrc/CalcLib/CalcLib.csproj

    dotnet build prod/calc.net/src/CalcApp/CalcApp.csproj

    dotnet run --project prod/calc.net/src/CalcApp/CalcApp.csproj

## 4.2 関連ドキュメント

- .NET RelWithDebInfo ビルド - RelWithDebInfo 設定の詳細
- C# / P/Invoke (スキルガイド) - .NET から C ライブラリを呼び出す実装
- .NET テスト (スキルガイド) - xUnit による .NET テスト