クイック スタート: Visual Studio を使用した NuGet パッケージの作成と公開 (.NET Standard、Windows のみ)

Windows の Visual Studio で .NET Standard クラス ライブラリから NuGet パッケージを作成し、CLI ツールを使用してパッケージを nuget.org に公開する簡単なプロセスです。

注意

Visual Studio for Mac をお使いの場合は、NuGet パッケージの作成に関するこちらの情報を参照するか、dotnet CLI ツールをご使用ください。

前提条件

  1. visualstudio.com から Visual Studio 2019 の任意のエディションと、.NET Core 関連のワークロードをインストールします。

  2. まだインストールされていない場合、dotnet CLI をインストールします。

    dotnet CLI について、Visual Studio 2017 以降、dotnet CLI は .NET Core 関連のワークロードと共に自動的にインストールされます。 それ以外の場合は、.NET Core SDK をインストールして dotnet CLI を取得します。 SDK スタイルの形式 (SDK 属性) を使用する .NET Standard プロジェクトには、dotnet CLI が必要です。 Visual Studio 2017 以降の既定の .NET Standard クラス ライブラリ テンプレート (この記事で使用するものです) では、SDK 属性が使用されます。

    重要

    非 SDK スタイルのプロジェクトを使用している場合は、代わりに .NET Framework パッケージの作成と公開 (Visual Studio) に関するページの手順に従って、パッケージの作成と公開を行ってください。 この記事では、dotnet CLI を使用することをお勧めします。 nuget.exe CLI を使用してもあらゆる NuGet パッケージを公開できますが、この記事の手順の一部は SDK スタイルのプロジェクトと dotnet CLI に固有のものです。 nuget.exe CLI は、非 SDK 形式のプロジェクト (通常は .NET Framework) 用に使用されます。

  3. まだ持っていない場合は、nuget.org で無料アカウントを登録します。 新しいアカウントを作成すると、確認メールが送信されます。 パッケージをアップロードするには、その前にアカウントを確認する必要があります。

クラス ライブラリ プロジェクトを作成する

パッケージ化するコードに既存の .NET Standard クラス ライブラリ プロジェクトを使用することも、次の手順に従って単純なプロジェクトを作成することもできます。

  1. Visual Studio で、 [ファイル]、[新規]、[プロジェクト] の順に選択し、 [Visual C#]、[.NET Standard] ノードの順に展開して "クラス ライブラリ (.NET Standard)" テンプレートを選択し、プロジェクトに AppLogger という名前を付け、 [OK] をクリックします。

    ヒント

    それ以外を選択する理由がない限り、.NET Standard は最も広い範囲の使用プロジェクトとの互換性を提供するため、NuGet パッケージの優先ターゲットです。

  2. 作成されたプロジェクト ファイルを右クリックし、 [ビルド] を選択して、プロジェクトが正しく作成されたことを確認します。 DLL は、デバッグ フォルダー (または代わりにその構成をビルドした場合はリリース フォルダー) 内にあります。

実際の NuGet パッケージ内ではもちろん、多くの便利な機能を実装し、他のユーザーはそれを使用してアプリケーションをビルドできます。 しかし、このチュートリアルでは、パッケージを作成するには、テンプレートのクラス ライブラリで十分なため、追加のコードを記述することはありません。 それでも、パッケージの一部の機能コードが必要な場合は、次のように使用します。

namespace AppLogger
{
    public class Logger
    {
        public void Log(string text)
        {
            Console.WriteLine(text);
        }
    }
}

パッケージのプロパティを構成する

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] メニュー コマンドを選択してから、 [パッケージ] タブを選択します。

    [パッケージ] タブは、Visual Studio の SDK スタイルのプロジェクト (通常は .NET Standard または .NET Core クラス ライブラリ プロジェクト) に対してのみ表示されます。非 SDK スタイルのプロジェクト (通常は .NET Framework) をターゲットとしている場合は、プロジェクトを移行するか、.NET Framework パッケージの作成と公開に関するページの詳細な手順をご覧ください。

    Visual Studio プロジェクト内の NuGet パッケージのプロパティ

    注意

    公開用にビルドされたパッケージの場合は、Tags プロパティに特に注意してください。これらのタグは他のユーザーがパッケージを検索して、パッケージの動作を理解するのに役立ちます。

  2. パッケージに一意の識別子を付けて、他の必要なプロパティを指定します。 MSBuild プロパティ (SDK スタイルのプロジェクト) から .nuspec 内のプロパティへのマッピングについては、「pack ターゲット」ご覧ください。 プロパティの説明については、.nuspec ファイル リファレンスに関するページをご覧ください。 これらのプロパティはすべて、Visual Studio でプロジェクト用に作成された .nuspecマニフェストに保存されます。

    重要

    パッケージには、nuget.org または使用しているホスト全体で一意の識別子を付ける必要があります。 このチュートリアルでは、以降の公開手順でパッケージを一般公開するので (ただし、誰かが実際に使用する可能性はありません)、名前に "Sample" または "Test" を含めることをお勧めします。

    既に存在する名前のパッケージを公開しようとすると、エラーが表示されます。

  3. (省略可能) プロジェクト ファイルで直接プロパティを表示するには、ソリューション エクスプローラーでプロジェクトを右クリックし、 [Edit AppLogger.csproj](AppLogger.csproj の編集) を選択します。

    このオプションは、Visual Studio 2017 以降で、SDK スタイルの属性を使用するプロジェクトに対してのみ使用できます。 それ以外の場合は、プロジェクトを右クリックして [プロジェクトのアンロード] を選択します。 次に、アンロードされたプロジェクトを右クリックし、 [Edit AppLogger.csproj](AppLogger.csproj の編集) を選択します。

pack コマンドを実行する

  1. 構成を [リリース] に設定します。

  2. ソリューション エクスプローラー で、プロジェクトを右クリックし、 [パック] コマンドを選択します。

    Visual Studio プロジェクトのコンテキスト メニューの NuGet パック コマンド

    [パック] コマンドが表示されない場合は、プロジェクトがおそらく SDK スタイルのプロジェクトではないため、nuget.exe CLI を使用する必要があります。 プロジェクトを移行して dotnet CLIを使用するか、代わりに .NET Framework パッケージの作成と公開に関するページの詳細な手順をご覧ください。

  3. Visual Studio により、プロジェクトがビルドされ、.nupkg ファイルが作成されます。 [出力] ウィンドウで (次のような) 詳細を確認します。このウィンドウには、パッケージ ファイルへのパスが表示されます。 ビルドされたアセンブリは .NET Standard 2.0 ターゲットに適合するため bin\Release\netstandard2.0 にもあります。

    1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------
    1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\netstandard2.0\AppLogger.dll
    1>Successfully created package 'd:\proj\AppLogger\AppLogger\bin\Release\AppLogger.1.0.0.nupkg'.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    

(オプション) ビルド時にパッケージを生成する

プロジェクトのビルド時に NuGet パッケージを自動的に生成するように、Visual Studio を構成できます。

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] を選択します。

  2. [パッケージ] タブで、 [ビルド時に NuGet パッケージを生成] を選択します。

    ビルド時に自動的にパッケージを生成する

注意

パッケージを自動的に生成する場合、パックする時間によってプロジェクトのビルド時間が長くなります。

(オプション) MSBuild を使用したパック

NuGet 4.x 以降と MSBuild 15.1 以降では、Pack メニュー コマンドを使用する代わりに、プロジェクトに必要なパッケージ データが含まれている場合に pack ターゲットをサポートしています。 コマンド プロンプトを開き、プロジェクト フォルダーに移動し、次のコマンドを実行します (MSBuild に必要なすべてのパスが構成されるため、通常は [スタート] メニューの [Developer Command Prompt for Visual Studio](Visual Studio 用開発者コマンド プロンプト) を使用します)。

詳細については、「Create a package using MSBuild」 (MSBuild を使用してパッケージを作成する) を参照してください。

パッケージを公開する

.nupkg ファイルを作成したら、nuget.exe CLI または dotnet.exe CLI と、nuget.org から取得した API キーを使用して、そのファイルを nuget.org に公開します。

注意

ウイルス スキャン: nuget.org にアップロードされたすべてのパッケージはウイルス スキャンが行われ、ウイルスが見つかった場合には拒否されます。 nuget.org の一覧にあるすべてのパッケージも定期的にスキャンされます。

nuget.org に公開したパッケージは、一覧から削除しない限り、他の開発者にも一般公開されます。 パッケージを非公開でホストするには、パッケージのホスティングに関するページを参照してください。

API キーを取得する

  1. ご自分の nuget.org アカウントにサインインするか、まだ持っていなければ、アカウントを作成します。

    アカウントの作成について詳しくは、「個人アカウント」をご覧ください。

  2. (右上で) ユーザー名を選択し、 [API キー] を選択します。

  3. [作成] を選択し、キーの名前を指定して、 [スコープの選択] > [プッシュ] の順に選択します。 [glob パターン] に「*」と入力してから、 [作成] を選択します。 (スコープの詳細については、後述の説明をご覧ください。)

  4. キーが作成されたら、 [コピー] を選択して、CLI で必要となるアクセス キーを取得します。

    API キーをクリップボードにコピーする

  5. 重要: キーは、後でもう一度コピーできないため、安全な場所に保存してください。 [API キー] ページに戻ったら、キーを再生成してコピーする必要があります。 CLI を通じてパッケージをプッシュする必要がなくなった場合は、API キーを削除することもできます。

スコープを使用して、別の目的のために別個の API キーを作成できます。 各キーは有効期限の時間枠を備え、特定のパッケージ (またはの glob パターン) に対してスコープを設定できます。 また、各キーは、新しいパッケージと更新のプッシュ、更新のプッシュのみ、リストからの除外など、特定の操作に対してもスコープを設定します。 スコープを使用して、必要なアクセス許可以外は持たない組織のパッケージ管理を行う別の担当者のために、API キーを作成できます。 詳しくは、「スコープ設定された API キー」をご覧ください。

dotnet CLI または nuget.exe CLI を使用して公開する

CLI ツールのタブ ( .NET Core CLI (dotnet cli) または NuGet (nuget.exe CLI)) を選択します。

nuget.exe を使用する代わりに、この手順を使用することをお勧めします。

パッケージを公開するには、まずコマンド ラインを開く必要があります。

  1. .nupkg ファイルを含むフォルダーに変更します。

  2. 使用するパッケージ名 (一意のパッケージ ID) を指定し、キーの値を使用する API キーに置き換えて、次のコマンドを実行します。

    dotnet nuget push AppLogger.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json
    
  3. dotnet により、公開プロセスの結果が表示されます。

    info : Pushing AppLogger.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
    info :   PUT https://www.nuget.org/api/v2/package/
    info :   Created https://www.nuget.org/api/v2/package/ 12620ms
    info : Your package was pushed.
    

dotnet nuget push」を参照してください。

公開エラー

push コマンドのエラーは、通常、問題があることを示します。 たとえば、プロジェクトのバージョン番号の更新を忘れて、既に存在するパッケージを公開しようとした場合などがあります。

また、ホストに既に存在する識別子を使用してパッケージを公開しようとするとエラーが表示されます。 たとえば、"AppLogger" という名前は既に存在します。 その場合、push コマンドを実行すると、次のエラーが表示されます。

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

作成したばかりの有効な API キーを使用している場合、エラーの "アクセス許可" 部分では完全には明白ではありませんが、このメッセージは名前の競合を示します。 パッケージ識別子を変更し、プロジェクトをリビルドして、 .nupkg ファイルを再作成した後、push コマンドを再試行します。

公開済みパッケージを管理する

nuget.org のプロファイルから、 [パッケージの管理] を選択して、公開したパッケージを確認します。 確認メールも送信されます。 パッケージがインデックス作成され、他のユーザーが検索して検索結果に表示されるようになるまでには、時間がかかる場合があることに注意してください。 この間、パッケージのページに次のメッセージが表示されます。

このパッケージはまだインデックスされていません。 インデックス作成が完了すると、検索結果に表示され、インストール/復元に使用できるようになります。

これで終了です。 最初の NuGet パッケージが nuget.org に公開され、他の開発者はそれを自身のプロジェクトで使用することができます。

このチュートリアルで作成したパッケージが、実際に有用ではない場合 (空のクラス ライブラリを使用して作成されたパッケージなど)、そのパッケージを一覧から削除して、検索結果に表示されないようにする必要があります。

  1. nuget.org で、ユーザー名 (ページの右上) を選択し、 [パッケージの管理] を選択します。

  2. [公開済み] の一覧から削除するパッケージを見つけて、右側のごみ箱のアイコンを選択します。

    nuget.org のパッケージの一覧に表示されたごみ箱のアイコン

  3. 後続のページで、 [List (package-name) in search results](検索結果に (パッケージ名) をリストする) というラベルの付いたボックスをオフにし、 [保存] を選択します。

    nuget.org でパッケージの [リストする] チェックボックスをクリア

ReadMe とその他のファイルの追加

パッケージに含めるファイルを直接指定するには、プロジェクト ファイルを編集して、content プロパティを使用します。

<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

これにより、パッケージ ルートに readme.txt という名前のファイルが含まれます。 Visual Studio では、パッケージを直接インストールした直後、そのファイルの内容がプレーンテキストとして表示されます。 (パッケージが依存関係としてインストールされた場合、ReadMe ファイルは表示されません。) たとえば、HtmlAgilityPack パッケージの ReadMe は次のように表示されます。

インストール時の NuGet パッケージの ReadMe ファイルの表示

注意

プロジェクトのルートに readme.txt を追加するだけでは、作成されたパッケージに含まれません。

他の NuGet ビデオは、Channel 9 および YouTube でご覧いただけます。