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

Microsoft Visual Studio で .NET クラス ライブラリから NuGet パッケージを作成し、CLI ツールを使用してパッケージを nuget.org に公開することができます。

このクイック スタートは Windows ユーザー専用です。 Visual Studio for Mac を使用している場合は、「既存のライブラリ プロジェクトから NuGet パッケージを作成する」を参照するか、.NET CLI を使用してください。

前提条件

  • Visual Studio 2022 for Windows と .NET Core 関連のワークロードをインストールします。

    visualstudio.microsoft.com から無料の 2022 Community Edition をインストールするか、Professional または Enterprise Edition を使用できます。

    Visual Studio 2017 以降では、.NET 関連のワークロードをインストールする際、NuGet 機能は自動的に含まれません。

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

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

    重要

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

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

  • nuget.org から NuGet CLI をダウンロードしてインストールします。nuget.exe ファイルを適切なフォルダーに追加して、そのフォルダーを PATH 環境変数に追加します。

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

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

  1. Visual Studio で、 [ファイル]>[新規]>[プロジェクト] の順に選択します。

  2. [新しいプロジェクトの作成] ウィンドウで、ドロップダウン リストから [C#][Windows]、および[ライブラリ] を選択します。

  3. 結果として表示されたプロジェクト テンプレートの一覧で、[クラス ライブラリ] (説明、NET または .NET Standard をターゲットとするクラス ライブラリを作成するためのプロジェクト) を選択し、[次へ] を選択します。

  4. [新しいプロジェクトの構成] ウィンドウで [プロジェクト名] に「AppLogger」と入力し、[次へ] を選択します。

  5. [追加情報] ウィンドウで、適切なフレームワークを選択し、[作成] を選択します。

    選択するフレームワークがわからない場合は、最新のフレームワークを選択することをお勧めします。後で簡単に変更できます。 使用するフレームワークの詳細については、「.NET 5.0 または .NET 6.0 と .NET Standard をターゲットにするタイミング」を参照してください。

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

  7. (オプション) このクイック スタートでは、テンプレート クラス ライブラリだけでパッケージを作成できるため、NuGet パッケージ用の追加コードを記述する必要はありません。 それでも、パッケージ用の機能コードが必要な場合は、次のコードを含めてください。

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

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

プロジェクトを作成したら、次の手順に従って NuGet パッケージのプロパティを設定できます。

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

  2. [パッケージ] ノードを展開し、[全般] を選択します。

    Visual Studio の [パッケージ] ノードは、SDK スタイルのプロジェクトにのみ表示されます。 SDK スタイルでないプロジェクト (通常は .NET Framework) をターゲットとしている場合は、プロジェクトを移行するか、「.NET Framework パッケージの作成と公開」を参照して、詳細な手順を確認してください。

    Screenshot showing NuGet package properties in a Visual Studio project.

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

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

    重要

    パッケージには、nuget.org または使用しているホスト全体で一意の識別子を付ける必要があります。 そうでない場合、エラーが発生します。 このクイック スタートでは、公開手順によってパッケージが一般公開されるため、名前に「Sample」または「Test」を含めることをお勧めします。

  5. (オプション) AppLogger.csproj プロジェクト ファイルでプロパティを直接表示するには、[プロジェクト]>[プロジェクト ファイルの編集] を選択します。

    [AppLogger.csproj] タブが読み込まれます。

    このオプションは、Visual Studio 2017 以降で、SDK スタイルの属性を使用するプロジェクトに対してのみ使用できます。 以前のバージョンの Visual Studio では、プロジェクト ファイルを編集する前に、[プロジェクト]>[プロジェクトのアンロード] を選択する必要があります。

pack コマンドを実行する

プロジェクトから NuGet パッケージを作成するには、次の手順に従います。

  1. [ビルド]>[構成マネージャー] を選択し、[アクティブ ソリューション構成][リリース] に設定します。

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

    Visual Studio により、プロジェクトがビルドされ、.nupkg ファイルが作成されます。

  3. [出力] ウィンドウで詳細を確認します。詳細には、パッケージ ファイルへのパスが含まれています。 この例では、ビルドされたアセンブリは bin\Release\net6.0 にあり、.NET 6.0 ターゲットに適合しています。

    1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------
    1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\net6.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 ==========
    
  4. [パック] コマンドがメニューに表示されない場合は、プロジェクトがおそらく SDK スタイルのプロジェクトではないため、NuGet CLI を使用する必要があります。 プロジェクトを移行して .NET CLIを使用するか、または「NET Framework パッケージの作成と公開」を参照して詳細な手順を確認してください。

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

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

  1. ソリューション エクスプローラーでプロジェクトを選択し、[プロジェクト><プロジェクト名>のプロパティ] を選択します。<プロジェクト名>はプロジェクトの名前です (この場合は AppLogger)。

  2. [パッケージ] ノードを展開し、[全般] を選択して、[ビルド時に NuGet パッケージを生成] を選択します。

    Screenshot showing package properties with Generate NuGet package on build selected.

Note

パッケージを自動的に生成する場合、パックする時間が余分にかかるため、プロジェクトの全体的なビルド時間が長くなります。

(オプション) MSBuild を使用してパックする

[パック] メニュー コマンドを使用する代わりとして、NuGet 4.x. 以降と MSBuild 15.1 以降では、プロジェクトに必要なパッケージ データが含まれている場合に pack ターゲットをサポートしています。

  1. ソリューション エクスプローラーでプロジェクトを開いた状態で、[ツール]>[コマンド ライン]>[開発者コマンド プロンプト] を選択してコマンド プロンプトを開きます。

    コマンド プロンプトはプロジェクト ディレクトリで開きます。

  2. コマンド msbuild -t:pack を実行します。

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

パッケージを公開する

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

Note

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

  • nuget.org に公開したパッケージは、一覧から削除しない限り、他の開発者に一般公開されます。 パッケージを非公開でホストするには、「独自の NuGet フィードのホスト」を参照してください。

API キーを取得する

NuGet パッケージを公開する前に、API キーを作成します。

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

  2. 右上にあるユーザー名を選択し、[API キー] を選択します。

  3. [作成] を選択して、キーの名前を指定します。

  4. [スコープの選択][プッシュ] を選択します。

  5. [パッケージの選択]>[glob パターン] に「*」と入力します。

  6. [作成] を選択します

  7. [コピー] を選択して新しいキーをコピーします。

    Screenshot that shows the new API key with the Copy link.

重要

  • API キーは誰にも教えないでください。 API キーはパスワードのようなものであり、API キーを使うと、誰でもお客様に代わってパッケージを管理できるようになります。 API キーが誤って漏えいした場合は、削除または再生成してください。
  • 後でもう一度キーをコピーすることはできないため、キーを安全な場所に保存しておいてください。 [API キー] ページに戻ったら、キーを再生成してコピーする必要があります。 パッケージをプッシュする必要がなくなった場合は、API キーを削除することもできます。

スコープを使用して、別の目的のために別の API キーを作成できます。 各キーには有効期限の時間枠があり、特定のパッケージ (またはの glob パターン) に対してスコープを設定できます。 また、各キーのスコープは、「新しいパッケージとパッケージ バージョンのプッシュ」、「新しいパッケージ バージョンのプッシュのみ」、「またはリストから外す」など、特定の操作に限定して設定します。

組織のパッケージ管理を行う担当者が必要なアクセス許可以外は持たないように、スコープを使用して、担当者ごとに API キーを作成できます。

詳しくは、「スコープ設定された API キー」をご覧ください。

.NET CLI または NuGet CLI を使用して公開する

次のいずれかの CLI ツールを使用すると、パッケージをサーバーにプッシュして公開できます。 CLI ツールのタブ (.NET CLI または NuGet CLI) を選択します。

NuGet CLI を使用する代わりに、.NET CLI (dotnet.exe) を使用することをお勧めします。

.nupkg ファイルを含むフォルダーから、次のコマンドを実行します。 .nupkg ファイル名を指定し、キーの値をご自身の API キーに置き換えます。

dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json

出力に、公開プロセスの結果が表示されます。

Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
  Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.

詳細については、「dotnet nuget push」を参照してください。

Note

テスト パッケージが nuget.org で公開されないようにするには、nuget.org のテスト サイト (https://int.nugettest.org) にプッシュします。int.nugettest.org にアップロードされたパッケージは保持されない場合があることに注意してください。

公開エラー

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

また、API キーが無効または期限切れである場合、またはホストに既に存在する識別子を使用してパッケージを発行しようとした場合も、エラーが表示されます。 たとえば、識別子 AppLogger-test が既に nuget.org に存在するとします。その識別子を持つパッケージを公開しようとすると、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 キーを使用していることを確認してください。 有効な API キーを使用している場合、このエラーは、パッケージ識別子がホストに既に存在していることを示します。 エラーを修正するには、一意になるようにパッケージ識別子を変更し、プロジェクトをリビルドして、.nupkg ファイルを再作成した後、push コマンドを再試行します。

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

パッケージが正常に公開されると、確認メールが届きます。 公開したパッケージを確認するには、nuget.org で右上にあるユーザー名を選択し、[パッケージの管理] を選択します。

Note

パッケージのインデックスが作成され、検索結果に表示されて他のユーザーが検索できるようになるまでに、時間がかかる場合があります。 その間、パッケージは [一覧に含まれないパッケージ] の下に表示され、パッケージ ページには次のメッセージが表示されます。

Screenshot showing the publishing message that's displayed when you upload a package to nuget.org.

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

役に立たないパッケージ (空のクラス ライブラリを使用して作成されたこのサンプル パッケージなど) を作成した場合、またはパッケージを公開しない場合は、検索結果で非表示になるように、パッケージをリストから外すことができます。

  1. パッケージが [パッケージの管理] ページの [公開済みパッケージ] の下に表示されたら、パッケージの一覧の横にある鉛筆アイコンを選択します。

    Screenshot that shows the Edit icon for a package listing on nuget.org.

  2. 次のページで、[リスト] を選択し、[検索結果に表示] チェックボックスの選択を解除して、[保存] を選択します。

    Screenshot that shows clearing the List checkbox for a package on nuget.org.

パッケージは、[パッケージの管理][一覧に含まれないパッケージ] の下に表示され、検索結果に表示されなくなります。

Note

テスト パッケージが nuget.org で公開されないようにするには、nuget.org のテスト サイト (https://int.nugettest.org) にプッシュします。int.nugettest.org にアップロードされたパッケージは保持されない場合があることに注意してください。

ReadMe とその他のファイルを追加する

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

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

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

1 ----------------------------------------------------
2 ---------- Html Agility Pack Nuget Readme ----------
3 ----------------------------------------------------
4
5 ----Silverlight 4 and Windows Phone 7.1+ projects-----
6 To use XPATH features: System.Xml.Xpath.dll from the 3 Silverlight 4 SDK must be referenced. 
7 This is normally found at 
8 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 
9 or 
10 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
11
12 ----Silverlight 5 projects-----
13 To use XPATH features: System.Xml.Xpath.dll from the Silverlight 5 SDK must be referenced. 
14 This is normally found at 
15 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client 
16 or 
17 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client

Note

プロジェクト ファイルの content プロパティに含めずに、プロジェクト ルートに readme.txt のみを追加した場合、パッケージには含まれません。

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

これで、Visual Studio .NET クラス ライブラリを使用して NuGet パッケージを作成できました。 次の記事に進み、Visual Studio .NET Framework を使用して NuGet パッケージを作成する方法を学習してください。

NuGet が提供する機能の詳細については、次の記事を参照してください。