NuGet パッケージには、開発者がプロジェクトで再利用できるコードが含まれています。 コードの内容や内容に関係なく、コマンド ライン ツール ( nuget.exe または dotnet.exe) を使用して NuGet パッケージを作成します。
この記事では、 dotnet CLI を使用してパッケージを作成する方法について説明します。 Visual Studio 2017 以降、dotnet CLI はすべての .NET ワークロードと .NET Core ワークロードに含まれています。 dotnet CLI またはその他の NuGet クライアント ツールをインストールする必要がある場合は、「 NuGet クライアント ツールのインストール」を参照してください。
このトピックは、.NET および SDK スタイルの形式を使用する他のプロジェクトにのみ適用されます。 これらのプロジェクトの場合、NuGet はプロジェクト ファイルの情報を使用してパッケージを作成します。 クイック スタートチュートリアルについては、「 dotnet CLI を使用してパッケージを作成する 」または 「Visual Studio でパッケージを作成する」を参照してください。
MSBuild msbuild -t:pack コマンドは、 機能的には dotnet pack と同等です。 MSBuild を使用したパッケージの作成の詳細については、「MSBuild を 使用した NuGet パッケージの作成」を参照してください。
注
SDK スタイル以外のプロジェクト (通常は .NET Framework プロジェクト) のパッケージを作成および発行するには、「 nuget.exe CLI を使用してパッケージを作成 する」または 「Visual Studio (.NET Framework) を使用してパッケージを作成して発行する」を参照してください。
packages.config から PackageReference に移行されたプロジェクトの場合は、
msbuild -t:packを使用します。 詳細については、「 移行後のパッケージの作成」を参照してください。
プロパティの設定
dotnet new classlib コマンドを使用してクラス ライブラリ プロジェクトの例を作成し、dotnet packを使用してプロジェクトをパッケージ化できます。
dotnet pack コマンドでは、次のプロパティを使用します。 プロジェクト ファイルに値を指定しない場合、コマンドは既定値を使用します。
-
PackageIdでは、パッケージ識別子は、nuget.org とそのパッケージをホストするその他のターゲット間で一意である必要があります。 値を指定しない場合、コマンドはAssemblyNameを使用します。 -
Versionは、Major.Minor.Patch[-Suffix]形式の特定のバージョン番号です。-Suffixは プレリリースバージョンを識別します。 指定しない場合は、既定値の1.0.0が使用されます。 -
Authorsはパッケージの作成者です。 指定しない場合、既定値はAssemblyNameです。 -
Companyは会社情報です。 指定しない場合、既定値はAuthors値です。 -
Productは製品情報です。 指定しない場合、既定値はAssemblyNameです。
Visual Studio では、プロジェクトのプロパティでこれらの値を設定できます。 ソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ] を選択し、[パッケージ] セクションを選択します。 プロパティを .csproj やその他のプロジェクト ファイルに直接追加することもできます。
次の例は、パッケージ プロパティが追加されたプロジェクト ファイルを示しています。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>UniqueID</PackageId>
<Version>1.0.0</Version>
<Authors>Author Name</Authors>
<Company>Company Name</Company>
<Product>Product Name</Product>
</PropertyGroup>
</Project>
Title、PackageDescription、PackageTagsなど、その他の省略可能なプロパティを追加できます。
注
一般に使用するためにビルドするパッケージの場合は、 PackageTags プロパティに特に注意してください。 タグは、他のユーザーがパッケージを見つけて、その内容を理解するのに役立ちます。
dotnet pack コマンドは、プロジェクト ファイル内のPackageReferenceを、作成したパッケージ内の依存関係に自動的に変換します。
IncludeAssets、ExcludeAssets、およびPrivateAssetsタグを使用して、含めるアセットを制御できます。 詳細については、 依存関係資産の制御を参照してください。
依存関係、省略可能なプロパティ、およびバージョン管理の詳細については、次を参照してください。
一意のパッケージ識別子を選択し、バージョン番号を設定する
パッケージ識別子とバージョン番号は、パッケージに含まれている正確なコードを一意に識別します。
パッケージ識別子を作成するには、次のベスト プラクティスに従います。
識別子は、nuget.org およびパッケージをホストする他のすべての場所で 一意 である必要があります。 競合を回避するには、識別子の最初の部分として会社名を使用することをお勧めします。
ドット表記を使用して、 .NET 名前空間に似た名前付け規則に従います。 たとえば、
Contoso.Utility.UsefulStuffやContoso-Utility-UsefulStuffではなく、Contoso_Utility_UsefulStuffを使用します。 また、コードで使用される名前空間にパッケージ識別子を一致させる場合は、コンシューマーにも役立ちます。別のパッケージの使用方法を示すサンプル コードのパッケージを生成する場合は、
.Sampleのように識別子にContoso.Utility.UsefulStuff.Sampleを追加します。サンプル パッケージは、元のパッケージに依存しています。 サンプル パッケージを作成するときに、
<IncludeAssets>値を使用してcontentFilesを追加します。 コンテンツ フォルダーで、\Samples\< などの \Samples\>identifier というフォルダーにサンプル コードを配置します。
パッケージのバージョンを設定するには、次のベスト プラクティスに従います。
一般に、パッケージのバージョンを プロジェクトまたはアセンブリのバージョンと一致するように設定しますが、これは厳密には必要ありません。 パッケージを 1 つのアセンブリに制限する場合、バージョンの照合は簡単です。 NuGet 自体は、アセンブリ バージョンではなく、依存関係を解決するときにパッケージ バージョンを処理します。
標準以外のバージョンスキームを使用する場合は、「パッケージのバージョン管理」で説明されているように、NuGet のバージョン管理規則を考慮してください。 NuGet は、主に セマンティック バージョン 2.0.0 に準拠しています。
注
依存関係の解決の詳細については、「 PackageReference を使用した依存関係の解決」を参照してください。 バージョン管理の理解に役立つ可能性がある情報については、次の一連のブログ記事を参照してください。
省略可能な説明フィールドを追加する
パッケージのオプションの説明は、パッケージの [nuget.org] ページの [ README ] タブに表示されます。 この説明は、プロジェクト ファイル内の<Description>または $description内のから取得します。
次の例は、.NET パッケージの Description ファイル内のを示しています。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://learn.microsoft.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://learn.microsoft.com/rest/api/storageservices/
REST API Reference for Blob Service - https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
pack コマンドを実行する
NuGet パッケージまたは .nupkg ファイルをビルドするには、プロジェクト フォルダーから dotnet pack コマンドを実行します。また、プロジェクトも自動的にビルドされます。
dotnet pack
出力には 、.nupkg ファイルへのパスが表示されます。
MSBuild version 17.3.0+92e077650 for .NET
Determining projects to restore...
Restored D:\proj\AppLoggerNet\AppLogger\AppLogger.csproj (in 97 ms).
Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.
ビルド時にパッケージを自動的に生成する
dotnet packを実行するたびにdotnet buildを自動的に実行するには、<PropertyGroup> タグ内のプロジェクト ファイルに次の行を追加します。
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
注
パッケージを自動的に生成すると、パッケージ化によってプロジェクトのビルド時間が長くなります。
ソリューションで dotnet pack を実行すると、ソリューション内でパック可能なすべてのプロジェクトがパックされます。つまり、 IsPackable プロパティが true に設定されます。
パッケージのインストールをテストする
パッケージを発行する前に、プロジェクトへのパッケージのインストールをテストする必要があります。 テストにより、必要なファイルがプロジェクト内の正しい場所に配置されるようになります。
通常のパッケージ インストール プロセスを使用して、Visual Studio またはコマンド ラインで手動で インストールをテストします。
Important
一度作成したパッケージは変更できません。 問題を修正する場合は、パッケージの内容を変更して再パックします。
パッケージを再作成した後も、 グローバル パッケージ フォルダーをクリアするまで、再テストでは古いバージョンのパッケージが使用されます。 フォルダーのクリアは、すべてのビルドで一意のプレリリース ラベルを使用しないパッケージにとって特に重要です。
次のステップ
パッケージを作成したら、 .nupkg ファイルを任意のホストに発行できます。
パッケージの機能を拡張したり、他のシナリオをサポートしたりする方法については、次の記事を参照してください。