NuGet
NuGet は.NET エコシステムのパッケージ マネージャーであり、開発者が .NET オープンソース ライブラリを検出して取得する主な方法です。 NuGet.org、NuGet パッケージをホストするために Microsoft が提供する無料サービスは、パブリック NuGet パッケージのプライマリ ホストですが、MyGet や Azure Artifacts などのカスタム NuGet サービスに発行できます。
する
NuGet パッケージを作成する
NuGet パッケージ (*.nupkg
) は、.NET アセンブリと関連付けられたメタデータを含む zip ファイルです。
NuGet パッケージを作成するには、主に 2 つの方法があります。 新しく推奨される方法は、SDK スタイルのプロジェクト (コンテンツが <Project Sdk="Microsoft.NET.Sdk">
で始まるプロジェクト ファイル) からパッケージを作成することです。 アセンブリとターゲットはパッケージに自動的に追加され、残りのメタデータはパッケージ名やバージョン番号など、MSBuild ファイルに追加されます。 dotnet pack
コマンドを使用してコンパイルすると、アセンブリではなく *.nupkg
ファイルが出力されます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Contoso.Api</AssemblyName>
<PackageVersion>1.1.0</PackageVersion>
<Authors>John Doe</Authors>
</PropertyGroup>
</Project>
NuGet パッケージを作成する以前の方法は、*.nuspec
ファイルと nuget.exe
コマンドライン ツールを使用することです。 nuspec ファイルは優れた制御を提供しますが、最終的な NuGet パッケージに含めるアセンブリとターゲットを慎重に指定する必要があります。 間違いを犯したり、変更を加えるときに誰かが nuspec の更新を忘れたりするのは簡単です。 nuspec の利点は、それを使用して、SDK スタイルのプロジェクト ファイルをまだサポートしていないフレームワーク用の NuGet パッケージを作成できることです。
✔️ SDK スタイルのプロジェクト ファイルを使用して NuGet パッケージを作成することを検討してください。
パッケージの依存関係
NuGet パッケージの依存関係については、依存関係の に関する記事で詳しく説明します。
重要な NuGet パッケージメタデータ
NuGet パッケージは、多くのメタデータ プロパティをサポートしています。 次の表に、NuGet.org のすべてのパッケージが提供する必要があるコア メタデータを示します。
MSBuild プロパティ名 | Nuspec の名前 | 説明 |
---|---|---|
PackageId |
id |
パッケージ識別子。 識別子のプレフィックスは、条件を満たしている場合に予約できます。 |
PackageVersion |
version |
NuGet パッケージのバージョン。 詳細については、NuGet パッケージのバージョンを参照してください。 |
Title |
title |
わかりやすいパッケージ タイトル。 既定値は PackageId です。 |
Description |
description |
UI に表示されるパッケージの長い説明。 |
Authors |
authors |
パッケージ作成者のコンマ区切りのリスト。nuget.org のプロファイル名と一致します。 |
PackageTags |
tags |
パッケージを記述するタグとキーワードのスペースまたはセミコロンで区切られたリスト。 タグは、パッケージを検索するときに使用されます。 |
PackageIcon |
icon |
パッケージ アイコンとして使用するパッケージ内のイメージへのパス。 icon メタデータについて詳しく読む |
PackageProjectUrl |
projectUrl |
プロジェクト ホームページまたはソース リポジトリの URL。 |
PackageLicenseExpression |
license |
プロジェクト ライセンスの SPDX 識別子。 識別子を使用できるのは、OSI および FSF 承認ライセンスのみです。 その他のライセンスでは、PackageLicenseFile を使用する必要があります。 license のメタデータについて詳しくお読みください。 |
✔️ NuGet のプレフィックスの予約条件を満たしているプレフィックスを持つ NuGet パッケージ名を選択することを検討してください。
✔️ パッケージ アイコンに HTTPS href を使用してください。
HTTPS を有効にして実行 NuGet.org などのサイトでは、HTTPS 以外のイメージを表示すると、混合コンテンツ警告が作成されます。
✔️ 結果を最適に表示するために、64 x 64 の透明な背景を持つパッケージ アイコンイメージを使用してください。
✔️ アセンブリと NuGet パッケージ ソース管理メタデータを追加するために、ソース リンク を設定することを検討してください。
Source Link は、
RepositoryUrl
およびRepositoryType
メタデータを NuGet パッケージに自動的に追加します。 ソース リンクでは、パッケージのビルド元の正確なソース コードに関する情報も追加されます。 たとえば、Git リポジトリから作成されたパッケージには、コミット ハッシュがメタデータとして追加されます。
プレリリース パッケージ
バージョン サフィックスを持つ NuGet パッケージは、プレリリース と見なされます。 既定では、ユーザーがプレリリース パッケージにオプトインしない限り、NuGet パッケージ マネージャー UI には安定したリリースが表示されるため、プレリリース パッケージは制限付きユーザー テストに最適です。
<PackageVersion>1.0.1-beta1</PackageVersion>
手記
安定したパッケージはプレリリース パッケージに依存できません。 独自のパッケージをプレリリースするか、以前の安定したバージョンに依存する必要があります。
NuGet プレリリース パッケージの依存関係NuGet プレリリース パッケージの依存関係
✔️ テスト、プレビュー、または実験を行うときは、プレリリース パッケージを発行してください。
✔️ 準備ができたら、安定したパッケージを発行して、他の安定したパッケージで参照できるようにします。
シンボル パッケージ
シンボル ファイル (*.pdb
) は、アセンブリと共に .NET コンパイラによって生成されます。 シンボル ファイルは実行場所を元のソース コードにマップするため、デバッガーを使用して実行中のソース コードをステップ実行できます。 NuGet では、.NET アセンブリを含むメイン パッケージと共にシンボル ファイルを含む個別のシンボル パッケージ (*.snupkg
) を生成する がサポートされています。 シンボル パッケージの考え方は、シンボル サーバーでホストされ、Visual Studio などのツールによってオンデマンドでのみダウンロードされるという考え方です。
NuGet.org は、独自の シンボル サーバー リポジトリをホストします。 開発者は、Visual Studio のシンボル ソースに https://symbols.nuget.org/download/symbols
を追加することで、NuGet.org シンボル サーバーに発行されたシンボルを使用できます。
重要
NuGet.org シンボル サーバーでは、SDK スタイルのプロジェクトによって作成された新しい ポータブル シンボル ファイル (*.pdb
) のみがサポートされます。
.NET ライブラリのデバッグ時に NuGet.org シンボル サーバーを使用するには、開発者が Visual Studio 2017 バージョン 15.9 以降を持っている必要があります。
シンボル パッケージを作成する代わりに、メイン NuGet パッケージにシンボル ファイルを埋め込む方法があります。 メインの NuGet パッケージは大きくなりますが、埋め込みシンボル ファイルは、開発者が NuGet.org シンボル サーバーを構成する必要がないようにすることを意味します。 SDK スタイルのプロジェクトを使用して NuGet パッケージをビルドする場合は、AllowedOutputExtensionsInPackageBuildOutputFolder
プロパティを設定してシンボル ファイルを埋め込むことができます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Include symbol files (*.pdb) in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
</Project>
シンボル ファイルを埋め込む欠点は、SDK スタイルのプロジェクトを使用してコンパイルされた .NET ライブラリのパッケージ サイズを約 30% 増やすことです。 パッケージ サイズが問題である場合は、シンボル パッケージ内でシンボルを発行する必要があります。
✔️ シンボルをシンボル パッケージ (*.snupkg
) として公開して NuGet.org することを検討してください
シンボル パッケージ (
*.snupkg
) を使用すると、開発者は、メイン パッケージのサイズを大きくしたり、NuGet パッケージをデバッグしないユーザーの復元パフォーマンスに影響を与えることなく、適切なオンデマンド デバッグ エクスペリエンスを実現できます。注意は、ユーザーがシンボル ファイルを取得するために、(1 回限りのセットアップとして) IDE で NuGet シンボル サーバーを見つけて構成する必要がある場合があるということです。 Visual Studio 2019 バージョン 16.1 では、NuGet.org のシンボル サーバーが既定のシンボル サーバーの一覧に追加されました。
.NET