トレーニング
モジュール
新しい .NET プロジェクトを作成し、パッケージの依存関係を処理する - Training
.NET プロジェクトを作成し、パッケージを追加して、プロジェクト内のパッケージ依存関係を管理する方法を学習します。 .NET Core CLI と NuGet レジストリを使用して、Visual Studio Code でライブラリとツールを C# アプリケーションに追加します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
.NET 5 (および .NET Core) 以降のバージョンはますます多くのプラットフォームで利用できるようになっているため、それを使用するアプリやライブラリをパッケージ化、名前付け、およびバージョン管理する方法を知っていると便利です。 そうすることで、パッケージの管理者は、ユーザーの .NET の実行環境に左右されることなく一貫した体験が保証されるようにサポートできます。 この記事は以下のユーザーに役立ちます。
インストールした .NET は複数のコンポーネントで構成されています。これらはファイル システムで次のようにレイアウトされています。
{dotnet_root} (0) (*)
├── dotnet (1)
├── LICENSE.txt (8)
├── ThirdPartyNotices.txt (8)
├── host (*)
│ └── fxr (*)
│ └── <fxr version> (2)
├── sdk (*)
│ └── <sdk version> (3)
├── sdk-manifests (4) (*)
│ └── <sdk feature band version>
├── library-packs (20) (*)
├── metadata (4) (*)
│ └── workloads
│ └── <sdk feature band version>
├── template-packs (4) (*)
├── packs (*)
│ ├── Microsoft.AspNetCore.App.Ref (*)
│ │ └── <aspnetcore ref version> (11)
│ ├── Microsoft.NETCore.App.Ref (*)
│ │ └── <netcore ref version> (12)
│ ├── Microsoft.NETCore.App.Host.<rid> (*)
│ │ └── <apphost version> (13)
│ ├── Microsoft.WindowsDesktop.App.Ref (*)
│ │ └── <desktop ref version> (14)
│ ├── NETStandard.Library.Ref (*)
│ │ └── <netstandard version> (15)
│ ├── Microsoft.NETCore.App.Runtime.<rid> (*)
│ │ └── <runtime version> (18)
│ ├── Microsoft.AspNetCore.App.Runtime.<rid> (*)
│ │ └── <aspnetcore version> (18)
│ └── runtime.<rid>.Microsoft.DotNet.ILCompiler (*)
│ └── <runtime version> (19)
├── shared (*)
│ ├── Microsoft.NETCore.App (*)
│ │ └── <runtime version> (5)
│ ├── Microsoft.AspNetCore.App (*)
│ │ └── <aspnetcore version> (6)
│ ├── Microsoft.AspNetCore.All (*)
│ │ └── <aspnetcore version> (6)
│ └── Microsoft.WindowsDesktop.App (*)
│ └── <desktop app version> (7)
└── templates (*)
│ └── <templates version> (17)
/
├── etc/dotnet
│ └── install_location (16)
├── usr/share/man/man1
│ └── dotnet.1.gz (9)
└── usr/bin
└── dotnet (10)
(0) {dotnet_root} は、すべての .NET メジャー バージョンとマイナー バージョンの共有ルートです。 複数のランタイムがインストールされている場合は、 {dotnet_root} フォルダー (たとえば、 {dotnet_root}/shared/Microsoft.NETCore.App/6.0.11
と {dotnet_root}/shared/Microsoft.NETCore.App/7.0.0
) を共有します。 {dotnet_root}
フォルダーの名前は、バージョンに依存せず、つまり単に dotnet
である必要があります。
(1) dotnet ホスト (別名 "muxer (マルチプレクサー)") には 2 つの異なるロールがあります。アプリケーションを起動するランタイムのアクティブ化と、コマンドをディスパッチする SDK のアクティブ化です。 ホストはネイティブの実行可能ファイルです (dotnet.exe
)。
ホストは 1 つですが、他のコンポーネントのほとんどはバージョン管理されたディレクトリに入っています (2、3、5、6)。 つまり、複数のバージョンが並列インストールされるので、それらをシステム上に置くことができます。
(2) host/fxr/<fxr バージョン> には、ホストが使用するフレームワーク解決ロジックが含まれます。 ホストでは、インストールされている最新の hostfxr が使用されます。 hostfxr は、.NET アプリケーションの実行時に適切なランタイムを選択する役割があります。 たとえば、.NET 7.0.0 用としてビルドされたアプリケーションは、7.0.5 が利用できればそれを利用します。 同様に、hostfxr は開発中、適切な SDK を選択します。
(3) sdk/<sdk バージョン> SDK (別名 "ツール") は、.NET のライブラリやアプリケーションを記述し、ビルドするために使用されるマネージド ツールのセットです。 SDK には、.NET CLI、マネージ言語コンパイラ、MSBuild、関連するビルド タスクとターゲット、NuGet、新しいプロジェクト テンプレートなどが含まれています。
(4) sdk-manifests/<sdk 機能バンド バージョン> 任意のワークロード インストールで必要になるアセットの名前とバージョンは、このフォルダーに格納されているワークロード マニフェストで保守管理されます。 フォルダー名は、SDK の機能バンド バージョンです。 そのため、7.0.102 などの SDK バージョンでは、このフォルダーの名前は 7.0.100 になるでしょう。 ワークロードがインストールされると、ワークロードの資産に必要に応じて、 metadata および template-pack のフォルダーが作成されます。 ディストリビューションでは、ワークロードを dotnet フォルダー以外のユーザー パスにインストールする場合、空の /metadata/workloads/<sdkfeatureband>/userlocal ファイルを作成できます。 詳細については、GitHub イシュー dotnet/installer#12104 を参照してください。
共有フォルダーには、フレームワークが含まれています。 共有フレームワークは、さまざまなアプリケーションで利用できるように、中央の場所で一連のライブラリを提供します。
(5) shared/Microsoft.NETCore.App/<runtime バージョン> このフレームワークには、.NET のランタイムと補助マネージド ライブラリが含まれています。
(6) shared/Microsoft.AspNetCore.{App,All}/<aspnetcore バージョン> には、ASP.NET Core ライブラリが含まれます。 Microsoft.AspNetCore.App
の下にあるライブラリは、.NET プロジェクトの一部として開発され、サポートされています。 Microsoft.AspNetCore.All
の下にあるライブラリは、サードパーティ製ライブラリも含まれるスーパーセットです。
(7) shared/Microsoft.Desktop.App/<デスクトップ アプリ バージョン> には、Windows デスクトップ ライブラリが含まれます。 これは、Windows 以外のプラットフォームには含まれていません。
(8) LICENSE.txt,ThirdPartyNotices.txt は、それぞれ .NET ライセンスと、.NET で利用されるサードパーティ ライブラリのライセンスです。
(9,10) dotnet.1.gz、dotnet dotnet.1.gz
は dotnet のマニュアル ページです。 dotnet
は dotnet host(1) のシンボリック リンクです。 これらのファイルは、システム統合のために、よく知られている場所にインストールされます。
(11,12) Microsoft.NETCore.App.Ref,Microsoft.AspNetCore.App.Ref には、.NET と ASP.NET Core のそれぞれの x.y
バージョンの API が記述されています。 これらのパックは、それのターゲット バージョンのコンパイル時に使用されます。
(13) Microsoft.NETCore.App.Host.<rid> には、プラットフォーム rid
のネイティブ バイナリが含まれます。 このバイナリは、.NET アプリケーションをそのプラットフォームのネイティブ バイナリにコンパイルするときのテンプレートです。
(14) Microsoft.WindowsDesktop.App.Ref には、Windows Desktop アプリケーションの x.y
バージョンの API が記述されています。 これらのファイルは、そのターゲットに対してコンパイルする場合に使用されます。 これは、Windows 以外のプラットフォームにはありません。
(15) NETStandard.Library.Ref には、netstandard x.y
の API が記述されています。 これらのファイルは、そのターゲットに対してコンパイルする場合に使用されます。
(16) /etc/dotnet/install_location は、{dotnet_root}
の完全なパスを含むファイルです。 パスの末尾は改行文字である場合があります。 ルートが /usr/share/dotnet
の場合は、このファイルを追加する必要はありません。
(17) templates には、SDK で使用されるテンプレートが含まれます。 たとえば、dotnet new
はここからプロジェクト テンプレートを検索します。
(18) Microsoft.NETCore.App.Runtime.<rid>/<runtime version>、Microsoft.AspNetCore.App.Runtime.<rid>/<aspnetcore version> これらのファイルを使用すると、自己完結型アプリケーションを構築できます。 これらのディレクトリには、(2)、(5)、(6) のファイルへのシンボリック リンクが含まれています。
(19) runtime.<rid>。Microsoft.DotNet.ILCompiler/<runtime バージョン> これらのファイルを使用すると、ターゲット プラットフォーム用の NativeAOT アプリケーションをビルドできます。
(20) library-packs には NuGet パッケージ ファイルが含まれています。 SDK は、このフォルダーを NuGet ソースとして使用するように構成されています。 .NET ビルドによって提供される NuGet パッケージの一覧を以下に示します。
(*)
でマークされたフォルダーは、複数のパッケージによって使用されます。 一部のパッケージ形式 (たとえば、rpm
) では、このようなフォルダーを特別に処理する必要があります。 パッケージのメンテナンス担当者は、このことに対処する必要があります。
library-packs
(20) に追加されるパッケージ ファイルには、Microsoft がターゲット プラットフォーム用に配布しないパッケージを指定できます。 ファイルは、Microsoft が配布するパッケージでも、プラットフォーム パッケージ配布ガイドラインを満たすためにソースからビルドされたパッケージを提供 library-packs
。 .NET ビルドには、次のパッケージが含まれています。
パッケージ名 | 発行者: Microsoft | 次の場合に必要です |
---|---|---|
Microsoft.DotNet.ILCompiler.<version>.nupkg Microsoft.NET.ILLink.Tasks.<version>.nupkg |
☑ | NativeAOT |
.NET バージョン管理は、ランタイム コンポーネント [major].[minor]
バージョン番号に基づきます。
SDK バージョンは同じ [major].[minor]
を利用し、SDK の機能とパッチ意味論を結合する非依存の [patch]
が与えられます。
次に例を示します。SDK バージョン 7.0.302 は、7.0 ランタイム対応の SDK の第 3 機能リリースの第 2 パッチ リリースです。 バージョン管理のしくみの詳細については、.NET のバージョン管理の概要に関するページを参照してください。
パッケージには、その名前にバージョン番号の一部が含まれているものもあります。 それによって、特定のバージョンをインストールすることができます。 バージョンの残りの部分はバージョン名には含まれていません。 それによって、OS パッケージ マネージャーはパッケージを更新できます (セキュリティ修正の自動インストールなど)。 サポートされるパッケージ マネージャーは Linux 固有です。
推奨するパッケージを、以下に示します。
dotnet-sdk-[major].[minor]
: 特定のランタイム用に最新の SDK をインストールします
dotnet-runtime-[major].[minor]
、aspnetcore-runtime-[major].[minor]
、dotnet-targeting-pack-[major].[minor]
、aspnetcore-targeting-pack-[major].[minor]
、netstandard-targeting-pack-[netstandard_major].[netstandard_minor]
、dotnet-apphost-pack-[major].[minor]
、dotnet-templates-[major].[minor]
dotnet-sdk-aot-[major].[minor]
- プラットフォーム NativeAOT 用の SDK コンポーネントをインストールします
dotnet-sdk-[major].[minor]
、 コンパイラ ツールチェーン、および .NET ランタイムが依存するライブラリの開発者パッケージaspnetcore-runtime-[major].[minor]
: 特定の ASP.NET Core ランタイムをインストールします
dotnet-runtime-[major].[minor]
dotnet-runtime-deps-[major].[minor]
(省略可能): 自己完結型アプリケーションを実行する依存関係をインストールします
dotnet-runtime-[major].[minor]
: 特定のランタイムをインストールします
dotnet-hostfxr-[major].[minor]
, dotnet-runtime-deps-[major].[minor]
dotnet-hostfxr-[major].[minor]
: 依存関係
dotnet-host
dotnet-host
: 依存関係
dotnet-apphost-pack-[major].[minor]
: 依存関係
dotnet-targeting-pack-[major].[minor]
: 最新ではないランタイムを対象にできます
aspnetcore-targeting-pack-[major].[minor]
: 最新ではないランタイムを対象にできます
netstandard-targeting-pack-[netstandard_major].[netstandard_minor]
: netstandard バージョンを対象にできます
dotnet-templates-[major].[minor]
次の 2 つのメタ パッケージは省略可能です。 エンド ユーザーは、最上位のパッケージ (dotnet-sdk) を抽象化することで、完全な .NET パッケージのインストールを簡略化するという点で価値があります。 これらのメタ パッケージは、特定の .NET SDK バージョンを参照します。
dotnet[major]
- 指定した SDK バージョンをインストールします
dotnet-sdk-[major].[minor]
dotnet
- ディストリビューションによって決定された特定の SDK バージョンをプライマリ バージョン (通常は利用可能な最新バージョン) にインストールします
dotnet-sdk-[major].[minor]
dotnet-runtime-deps-[major].[minor]
では、ディストリビューション固有の依存関係を理解している必要があります。 ディストリビューションのビルド システムは、これを自動的に得ることができる可能性があるため、このパッケージは省略可能です。これらの場合、これらの依存関係は dotnet-runtime-[major].[minor]
パッケージに直接追加されます。
パッケージの内容がバージョン付きフォルダーにある場合、[major].[minor]
のパッケージ名はバージョン付きのフォルダー名と同じになります。 netstandard-targeting-pack-[netstandard_major].[netstandard_minor]
を除くすべてのパッケージでは、これは .NET バージョンとも同じになります。
パッケージ間の依存関係では、バージョン要件以上を使用する必要があります。 たとえば、dotnet-sdk-7.0:7.0.401
には aspnetcore-runtime-7.0 >= 7.0.6
が必要です。 これにより、ユーザーはルート パッケージ (たとえば、dnf update dotnet-sdk-7.0
) を使用してインストールをアップグレードできます。
ほとんどのディストリビューションで、ソースからビルドするすべての成果物を必要とします。 これはパッケージにいくつかの影響を与えます。
shared/Microsoft.AspNetCore.All
の下にあるサードパーティ製ライブラリは、ソースから簡単にビルドできません。 そのため、そのフォルダーは aspnetcore-runtime
パッケージから除外されます。
NuGetFallbackFolder
は nuget.org
からバイナリ成果物を利用して入力されます。 空のままにしてください。
複数の dotnet-sdk
パッケージで NuGetFallbackFolder
に同じファイルが提供されることがあります。 パッケージ マネージャーの問題を回避するには、これらのファイルを同じにします (チェックサム、変更日など)。
デバッグ コンテンツは、この記事で前述した .NET パッケージ分割に従うデバッグ名付きパッケージにパッケージ化する必要があります。 たとえば、dotnet-sdk-[major].[minor]
パッケージのデバッグ コンテンツは、dotnet-sdk-dbg-[major].[minor]
という名前のパッケージに含める必要があります。 デバッグ コンテンツは、バイナリと同じ場所にインストールする必要があります。
バイナリの例をいくつか次に示します。
{dotnet_root}/sdk/<sdk version>
ディレクトリには、次の 2 つのファイルが必要です。
dotnet.dll
- dotnet-sdk-[major].[minor]
パッケージと共にインストールされるdotnet.pdb
- dotnet-sdk-dbg-[major].[minor]
パッケージと共にインストールされる{dotnet_root}/shared/Microsoft.NETCore.App/<runtime version>
ディレクトリには、次の 2 つのファイルが必要です。
System.Text.Json.dll
- dotnet-runtime-[major].[minor]
パッケージと共にインストールされるSystem.Text.Json.pdb
- dotnet-runtime-dbg-[major].[minor]
パッケージと共にインストールされる{dotnet_root/shared/Microsoft.AspNetCore.App/<aspnetcore version>
ディレクトリには、次の 2 つのファイルが必要です。
Microsoft.AspNetCore.Routing.dll
- aspnetcore-runtime-[major].[minor]
パッケージと共にインストールされるMicrosoft.AspNetCore.Routing.pdb
- aspnetcore-runtime-dbg-[major].[minor]
パッケージと共にインストールされる.NET 8.0 以降では、ソース ビルドによって生成されたすべての .NET デバッグ コンテンツ (PDB ファイル) を、dotnet-symbols-sdk-<version>-<rid>.tar.gz
という名前の tarball で使用できます。 このアーカイブには、.NET SDK tarball - dotnet-sdk-<version>-<rid>.tar.gz
のディレクトリ構造に一致するサブディレクトリ内の PDB が含まれています。
デバッグ tarball ではすべてのデバッグ コンテンツを使用できますが、すべてのデバッグ コンテンツが同じように重要であるとは言えません。 エンド ユーザーは、主に、shared/Microsoft.AspNetCore.App/<aspnetcore version>
ディレクトリと shared/Microsoft.NETCore.App/<runtime version>
ディレクトリの内容に関心があります。
sdk/<sdk version>
の SDK コンテンツは、.NET SDK ツールセットのデバッグに役立ちます。
次のパッケージは、推奨されるデバッグ パッケージです。
aspnetcore-runtime-dbg-[major].[minor]
- 特定の ASP.NET Core ランタイムのデバッグ コンテンツをインストールします
aspnetcore-runtime-[major].[minor]
dotnet-runtime-dbg-[major].[minor]
- 特定のランタイムのデバッグ コンテンツをインストールします
dotnet-runtime-[major].[minor]
次のデバッグ パッケージは省略可能です。
dotnet-sdk-dbg-[major].[minor]
- 特定の SDK バージョンのデバッグ コンテンツをインストールします dotnet-sdk-[major].[minor]
デバッグ tarball は、shared
のコンテンツのコピーを表す、packs
の下にいくつかのデバッグ コンテンツを含みます。 .NET レイアウトでは、packs
ディレクトリは .NET アプリケーションのビルドに使用されます。 デバッグ シナリオがないため、デバッグ tarball の packs
下にデバッグ コンテンツをパッケージ化しないでください。
dotnet/source-build リポジトリでは、.NET SDK のソース ターボールとそのすべてのコンポーネントをビルドする方法が提供されます。 この source-build リポジトリの出力は、この記事の最初のセクションで説明したレイアウトに一致します。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
モジュール
新しい .NET プロジェクトを作成し、パッケージの依存関係を処理する - Training
.NET プロジェクトを作成し、パッケージを追加して、プロジェクト内のパッケージ依存関係を管理する方法を学習します。 .NET Core CLI と NuGet レジストリを使用して、Visual Studio Code でライブラリとツールを C# アプリケーションに追加します。