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

.NET Framework クラス ライブラリから NuGet パッケージを作成するには、Windows の Visual Studio で DLL を作成した後、nuget.exe コマンド ライン ツールを使用してパッケージを作成し、公開します。

注意

このクイック スタートが適用されるのは、Windows 用の Visual Studio 2017 以降のバージョンのみです。 ここで説明される機能は、Visual Studio for Mac には含まれません。 代わりに dotnet CLI ツールを使用してください。

必須コンポーネント

  1. visualstudio.com から Visual Studio 2017 以降の任意のエディションと、.NET 関連の任意のワークロードをインストールします。 Visual Studio 2017 では、.NET ワークロードをインストールする際、NuGet 機能は自動的に含まれません。

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

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

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

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

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

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

実際の NuGet パッケージ内ではもちろん、多くの便利な機能を実装し、他のユーザーはそれを使用してアプリケーションをビルドできます。 また、目的のターゲット フレームワークに設定することもできます。 例については、UWPXamarin のガイドを参照してください。

しかし、このチュートリアルでは、パッケージを作成するには、テンプレートのクラス ライブラリで十分なため、追加のコードを記述することはありません。 それでも、パッケージの一部の機能コードが必要な場合は、次のように使用します。

using System;

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

ヒント

それ以外を選択する理由がない限り、.NET Standard は最も広い範囲の使用プロジェクトとの互換性を提供するため、NuGet パッケージの優先ターゲットです。 「Visual Studio を使用したパッケージの作成と公開 (.NET Standard)」を参照してください。

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

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

  1. [プロジェクト]、[プロパティ] メニュー コマンドの順に選択し、 [アプリケーション] タブを選択します。

  2. [アセンブリ名] フィールドで、パッケージに一意の識別子を付けます。

    重要

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

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

  3. [アセンブリ情報] ボタンを選択すると、マニフェストに含める他のプロパティを入力するためのダイアログ ボックスが表示されます (.nuspec ファイル リファレンスの置換トークンに関するセクションを参照してください)。 最もよく使用されるフィールドは、 [タイトル][説明][会社名][著作権][アセンブリ バージョン] です。 これらのプロパティは、最終的に nuget.org のようなホスト上でパッケージと共に表示されるので、わかりやすい値を設定してください。

    Visual Studio の .NET Framework プロジェクトのアセンブリ情報

  4. 省略可能: プロパティを直接表示および編集するには、プロジェクトの Properties/AssemblyInfo.cs ファイルを開きます。

  5. プロパティが設定されたら、プロジェクトの構成を リリース に設定し、プロジェクトをリビルドして、更新された DLL を生成します。

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

DLL を入手し、プロジェクトのプロパティを設定したら、nuget spec コマンドを使用してプロジェクトから最初の .nuspec ファイルを生成します。 この手順には、プロジェクト ファイルから情報を引き出すための関連する置換トークンが含まれています。

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

  1. コマンド プロンプトを開き、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>YourUsername</authors>
        <owners>YourUsername</owners>
        <license type="expression">MIT</license>
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2019</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

マニフェストを編集する

  1. .nuspec ファイルで既定値のパッケージを作成しようとすると NuGet でエラーが発生するため、次のフィールドを編集して続行する必要があります。 これらの使用方法については、.nuspec ファイル リファレンスのオプションのメタデータ要素に関するセクションを参照してください。

    • licenseUrl
    • projectUrl
    • iconUrl
    • releaseNotes
    • tags
  2. 公開用にビルドされたパッケージの場合は、Tags プロパティに特に注意してください。これらのタグは nuget.org などのソースで他のユーザーがパッケージを検索して、パッケージの動作を理解する場合に役立ちます。

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

  4. 続行する前にファイルを保存してください。

pack コマンドを実行する

  1. .nuspec ファイルを含むフォルダーのコマンド プロンプトから、コマンド nuget pack を実行します。

  2. NuGet で、現在のフォルダー内に identifier-version.nupkg の形式で .nupkg ファイルが生成されます。

パッケージを公開する

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

注意

ウイルス スキャン: 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 キー」をご覧ください。

nuget push を使用して公開する

  1. コマンド ラインを開き、.nupkg ファイルを含むフォルダーに変更します。

  2. 次のコマンドでパッケージ名を指定し、キーを API キーに置き換えて、コマンドを実行します。

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

    Pushing AppLogger.1.0.0.nupkg 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に関するページを参照してください。

公開エラー

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 でパッケージの [リストする] チェックボックスをクリア

次の手順

無事に、最初の NuGet パッケージを作成できました。

NuGet による提供についてさらに詳しく調べるには、下のリンクを選択してください。