クイック スタート: Visual Studio (.NET Framework、Windows) を使用してパッケージを作成して発行する

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

このクイック スタートは、Windowsユーザーのみを対象としています。 Visual Studio for Mac を使用している場合は、代わりに dotnet CLI ツールを参照してください。

前提条件

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

    2022 Community エディションは 、visualstudio.microsoft.com から無料でインストールすることも、Professional または Enterprise エディションを使用することもできます。

    Visual Studio 2017 以降では、.NET ワークロードのインストール時に NuGet 機能が自動的に含まれます。

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

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

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

クラス ライブラリ プロジェクトを作成するには、次の手順に従います。

  1. Visual Studioで、File>New>Project を選択します。

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

  3. 結果のプロジェクト テンプレートの一覧で、Class Library (.NET Framework) を選択し、 Next を選択します。

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

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

  6. (省略可能)このクイック スタートでは、テンプレート クラス ライブラリでパッケージを作成するだけで十分であるため、NuGet パッケージの追加コードを記述する必要はありません。 ただし、このサンプル パッケージの機能コードが必要な場合は、次のコードを含めます。

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

    実際の NuGet パッケージ内では、他のユーザーがアプリケーションをビルドできる多くの便利な機能を実装する可能性があります。 ターゲット フレームワークを設定することもできます。 例については、「 UWP」を参照してください。

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

NuGet パッケージには、パッケージ識別子、バージョン番号、説明などの関連するメタデータを含むマニフェスト ( .nuspec ファイル) が含まれています。 このメタデータの一部はプロジェクト プロパティから直接取得できるため、プロジェクトとマニフェストの両方で個別に更新する必要がなくなります。 次の手順では、適用可能なプロパティを設定する方法について説明します。

  1. Project > プロパティを選択し、Application タブを選択します。

  2. [アセンブリ名] には、パッケージに一意の識別子を指定します。 既に存在する名前のパッケージを発行しようとすると、エラーが表示されます。

    Important

    パッケージには、nuget.org または使用しているホスト全体で一意の識別子を指定する必要があります。 それ以外の場合、エラーが発生します。 このクイック スタートでは、発行手順によってパッケージがパブリックに表示されるため、名前に サンプル または テスト を含めてお勧めします。

  3. アセンブリ 情報を選択します。ダイアログ ボックスが表示され、マニフェストに含まれる他のプロパティを入力できます ( 置換トークンを参照)。 最も一般的に使用されるフィールドは、 タイトル説明会社著作権アセンブリのバージョンです。 これらのプロパティは、発行後に nuget.org などのホスト上のパッケージと共に表示されるため、完全にわかりやすいものになっていることを確認してください。

    Visual Studio の .NET Framework プロジェクトで [アセンブリ情報] ページを示すスクリーンショット

  4. (省略可能)プロパティを直接表示および編集するには、projectの Properties/AssemblyInfo.cs ファイルを開きます。そのためには、Project>Edit Project File を選択します。

  5. これらのプロパティを設定した後、 BuildConfiguration Manager> の Active ソリューション構成 を Release に設定し、更新された DLL を生成するためにプロジェクトをリビルドします。

初期マニフェストを生成する

プロジェクトのプロパティを設定し、DLL を作成したら、プロジェクトから最初の .nuspec ファイルを生成できるようになりました。 この手順には、プロジェクト ファイルから情報を取得するための関連する置換トークンが含まれています。

nuget specを 1 回だけ実行して、初期マニフェストを生成します。 パッケージを更新する場合は、プロジェクトの値を変更するか、マニフェストを直接編集します。

  1. プロジェクトを Solution Explorer で開いた状態で、Tools>Command Line>Developer Command Prompt を選択してコマンド プロンプトを開きます。

    コマンド プロンプトが、 AppLogger.csproj ファイルがあるプロジェクト ディレクトリで開きます。

  2. 次のコマンドを実行します: nuget spec AppLogger.csproj

    NuGet は、プロジェクトの名前と一致するマニフェストを作成します (この場合は AppLogger.nuspec)。 マニフェストには置換トークンも含まれます。

  3. テキスト エディターで AppLogger.nuspec を開いて内容を調べます。これは次のコードのようになります。

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>Package</id>
        <version>1.0.0</version>
        <authors>Your username</authors>
        <owners>Your username</owners>
        <license type="expression">MIT</license>
        <!-- <icon>icon.png</icon> -->
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2022</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

マニフェストを編集する

  1. 続行する前に、次のプロパティを編集します。 それ以外の場合、 .nuspec ファイルの既定値を使用して NuGet パッケージを作成しようとすると、エラーが発生します。 これらのプロパティの詳細については、「 省略可能なメタデータ要素」を参照してください。

    • licenseUrl
    • projectUrl
    • リリースノート
    • tags
  2. 一般に使用するために構築されたパッケージの場合、タグは他のユーザーがパッケージを見つけ、その動作を理解するのに役立つため、 Tags プロパティに特別な注意を払います。

  3. . nuspec ファイルリファレンスで説明されているように、現時点でマニフェストに他の要素を追加することもできます。

  4. 続行する前にファイルを保存します。

pack コマンドを実行する

  1. プロジェクトを Solution Explorer で開いた状態で、Tools>Command Line>Developer Command Prompt を選択してコマンド プロンプトを開きます。

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

  2. 次のコマンドを実行します: nuget pack

    NuGet は、現在のフォルダー内の identifier.version.nupkg の形式で .nupkg ファイルを生成します。

パッケージを発行する

.nupkg ファイルを作成したら、nuget.org から取得した API キーと共に NuGet CLI を使用して nuget.org に発行します。nuget.org の場合は、nuget.exe 4.1.0 以降を使用する必要があります。

パブリック ギャラリーを発行する前にパッケージをテストして検証する場合は、 nuget.org ではなく、int.nugettest.org などのテスト環境にアップロードできます。int.nugettest.org にアップロードされたパッケージは保持されない場合があることに注意してください。

  • Nuget.org は、アップロードされたすべてのパッケージでウイルスをスキャンし、ウイルスを含むパッケージを拒否します。 Nuget.org は、リストされているすべてのパッケージを定期的にスキャンします。

  • nuget.org に発行するパッケージは、リストを解除しない限り、他の開発者に公開されます。 パッケージを非公開でホストするには、「 独自の NuGet フィードのホスティング」を参照してください。

API キーを取得する

  1. nuget.org アカウントにサインイン するか、まだアカウントがない場合は アカウントを作成 します。

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

  3. [ 作成] を選択し、キーの名前を入力します。

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

  5. [ パッケージの選択] の [Glob パターン] に、アスタリスク (*) を入力します。

  6. を選択してを作成します。

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

    新しい API キー、キーのコピーに関するメッセージ、強調表示されている [コピー] ボタンを示す nuget.org ページのスクリーンショット。

Important

  • API キーは常にシークレットのままにします。 API キーは、誰でも自分の代わりにパッケージを管理するために使用できるパスワードに似ています。 誤って表示された場合は、API キーを削除または再生成します。
  • 後でもう一度キーをコピーできないため、キーを安全な場所に保存します。 API キー ページに戻った場合は、キーを再生成してコピーする必要があります。 パッケージをプッシュする必要がなくなった場合は、API キーを削除することもできます。

スコープ を使用すると、さまざまな目的で個別の API キーを作成できます。 各キーには有効期限があり、特定のパッケージまたは glob パターンにキーのスコープを設定できます。 また、各キーのスコープは、新しいパッケージとパッケージ バージョンのプッシュ、新しいパッケージ バージョンのプッシュのみ、またはリストの解除など、特定の操作に限定します。

スコープを使用すると、組織のパッケージを管理するさまざまなユーザーに対して API キーを作成し、必要なアクセス許可のみを持つことができます。

詳細については、「 スコープ付き API キー」を参照してください。

NuGet CLI を使用して発行する

.NET CLI を使用する代わりに、NuGet CLI (nuget.exe) を使用する方法があります。

  1. コマンド プロンプトを開き、 .nupkg ファイルを含むフォルダーに移動します。

  2. 次のコマンドを実行します。 パッケージ <ファイル名> パッケージのファイル名に置き換え、 <api キーの値> を API キーに置き換えます。 パッケージ ファイル名は、パッケージ ID とバージョン番号と .nupkg 拡張子を連結したものです。 たとえば、 AppLogger.1.0.0.nupkg:

    nuget push <package filename> <api key value> -Source https://api.nuget.org/v3/index.json
    

    発行プロセスの結果は次のように表示されます。

    Pushing <package filename> to 'https://www.nuget.org/api/v2/package'...
        PUT https://www.nuget.org/api/v2/package/
        Created https://www.nuget.org/api/v2/package/ 6829ms
    Your package was pushed.
    

詳細については、 nuget プッシュを参照してください。

発行エラー

push コマンドを実行すると、エラーが発生することがあります。 たとえば、次のような状況でエラーが発生することがあります。

  • API キーが無効であるか、有効期限が切れています。
  • ホストに既に存在する識別子を持つパッケージを発行しようとするとします。
  • 発行済みパッケージに変更を加えますが、もう一度発行する前にバージョン番号の更新を忘れた場合。

エラー メッセージは通常、問題の原因を示します。

たとえば、識別子 Contoso.App.Logger.Test nuget.org に存在するとします。その識別子を持つパッケージを発行しようとすると、次のエラーが表示されます。

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.org 警告メッセージのスクリーンショット。テキストには、検証とインデックス作成には 1 時間かかる可能性があることを示します。

NuGet パッケージが nuget.org で発行されたので、他の開発者はプロジェクトで使用できます。

役に立たないパッケージ (空のクラス ライブラリからのこのサンプル パッケージなど) を作成する場合、またはパッケージを表示したくない場合は、パッケージの 一覧を解除 して検索結果から非表示にすることができます。

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

    [nuget.org パッケージ] ページのスクリーンショット。[発行済みパッケージ] セクションには、1 つのパッケージが一覧表示されます。編集アイコンが強調表示されています。

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

    nuget.org ページのスクリーンショット。[リスト] セクションで、検索結果にパッケージを一覧表示するオプションが強調表示されています。

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

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

次のステップ

Visual Studio .NET Framework を使用して NuGet パッケージを作成しました。 次の記事に進み、NuGet CLI を使用して NuGet パッケージを作成する方法について説明します。

NuGet が提供するさらなる機能を探索するには、次の記事をご覧ください。