クイック スタート: Visual Studio を使用したパッケージの作成と公開 (.NET Framework、Windows)
Microsoft Visual Studio で .NET Framework クラス ライブラリから NuGet パッケージを作成し、NuGet CLI ツールを使用してパッケージを nuget.org に公開することができます。
このクイック スタートは Windows ユーザー専用です。 Visual Studio for Mac を使用している場合は、代わりに dotnet CLI ツールを参照してください。
前提条件
Visual Studio 2022 for Windows と .NET 関連のワークロードをインストールします。
visualstudio.microsoft.com から無料の 2022 Community Edition をインストールするか、Professional または Enterprise Edition を使用できます。
Visual Studio 2017 以降では、.NET ワークロードをインストールすると NuGet 機能が自動的に含まれます。
まだ持っていない場合は、nuget.org で無料アカウントを登録します。 パッケージをアップロードするには、その前にアカウントを登録して確認する必要があります。
nuget.org から NuGet CLI をダウンロードしてインストールします。nuget.exe ファイルを適切なフォルダーに追加して、そのフォルダーを PATH 環境変数に追加します。
クラス ライブラリ プロジェクトを作成する
クラス ライブラリ プロジェクトを作成するには、次の手順に従います。
Visual Studio で、 [ファイル]>[新規]>[プロジェクト] の順に選択します。
[新しいプロジェクトの作成] ウィンドウで、ドロップダウン リストから [C#]、[Windows]、および[ライブラリ] を選択します。
結果として表示されるプロジェクト テンプレートの一覧で、[クラス ライブラリ (.NET Framework)] を選択してから、[次へ] を選択します。
[新しいプロジェクトの構成] ウィンドウで、[プロジェクト名] に「AppLogger」と入力し、[作成] を選択します。
プロジェクトが正しく作成されたことを確認するには、[ビルド]>[ソリューションのビルド] を選択します。 DLL は、デバッグ フォルダー (または代わりにその構成をビルドした場合はリリース フォルダー) 内にあります。
(オプション) このクイック スタートでは、テンプレート クラス ライブラリだけでパッケージを作成できるため、NuGet パッケージ用の追加コードを記述する必要はありません。 それでも、このサンプル パッケージ用の機能コードが必要な場合は、次のコードを含めてください。
namespace AppLogger { public class Logger { public void Log(string text) { Console.WriteLine(text); } } }
実際の NuGet パッケージ内では、多くの便利な機能を実装し、他のユーザーはそれを使用してアプリケーションをビルドできます。 また、ターゲット フレームワークに設定することもできます。 例については、UWP と Xamarin を参照してください。
パッケージのプロジェクト プロパティを構成する
NuGet パッケージには、パッケージ識別子、バージョン番号、説明などの関連するメタデータを含むマニフェスト (.nuspec
ファイル) が含まれています。 このメタデータの一部は、プロジェクトのプロパティから直接引き出すことができるので、プロジェクトとマニフェストの両方で個別に更新する必要はありません。 次の手順では、適用可能なプロパティを設定する方法について説明します。
[プロジェクト] > [プロパティ] を選択し、[アプリケーション] タブを選択します。
[アセンブリ名] で、パッケージに一意の識別子を付けます。 既に存在する名前のパッケージを公開しようとすると、エラーが表示されます。
重要
パッケージには、nuget.org または使用しているホスト全体で一意の識別子を付ける必要があります。 そうでない場合、エラーが発生します。 このクイック スタートでは、公開手順によってパッケージが一般公開されるため、名前に「Sample」または「Test」を含めることをお勧めします。
[アセンブリ情報] を選択すると、マニフェストに含める他のプロパティを入力するためのダイアログ ボックスが表示されます (「置換トークン」を参照してください)。 最もよく使用されるフィールドは、[タイトル]、[説明]、[会社名]、[著作権]、[アセンブリ バージョン] です。 これらのプロパティは、公開後に nuget.org のようなホスト上でパッケージと共に表示されるので、わかりやすい値を設定してください。
(オプション) プロパティを直接表示して編集するには、[プロジェクト]>[プロジェクト ファイルの編集] を選択して、プロジェクト内の Properties/AssemblyInfo.cs ファイルを開きます。
これらのプロパティを設定したら、[ビルド]>[構成マネージャー] の [アクティブ ソリューション構成] を [リリース] に設定し、プロジェクトをリビルドして更新された DLL を生成します。
初期マニフェストを生成する
プロジェクトのプロパティを設定し、DLL を作成したら、プロジェクトから最初の .nuspec ファイルを生成できるようになります。 この手順には、プロジェクト ファイルから情報を引き出すための関連する置換トークンが含まれています。
nuget spec
を 1 回だけ実行して最初のマニフェストを生成します。 パッケージを更新するときは、プロジェクトの値を変更するか、マニフェストを直接編集します。
ソリューション エクスプローラーでプロジェクトを開いた状態で、[ツール]>[コマンド ライン]>[開発者コマンド プロンプト] を選択してコマンド プロンプトを開きます。
コマンド プロンプトが、
AppLogger.csproj
ファイルが配置されているプロジェクト ディレクトリで開きます。コマンド
nuget spec AppLogger.csproj
を実行します。NuGet でプロジェクトの名前 (この場合は
AppLogger.nuspec
) と一致するマニフェストが作成されます。 マニフェストには置換トークンも含まれます。テキスト エディターで
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>
マニフェストを編集する
続行する前に、次のプロパティを編集します。 それ以外の場合、
.nuspec
ファイル内の既定値を使用して NuGet パッケージを作成しようとすると、エラーが発生します。 これらのプロパティの詳細については、「オプションのメタデータ要素」を参照してください。- licenseUrl
- projectUrl
- releaseNotes
- tags
公開用にビルドされたパッケージの場合は、Tagsプロパティに特に注意してください。これらのタグは他のユーザーがパッケージを検索して、パッケージの動作を理解するのに役立ちます。
「.nuspec ファイル リファレンス」で説明されているように、この時点で他の要素をマニフェストに追加することもできます。
続行する前にファイルを保存してください。
pack コマンドを実行する
ソリューション エクスプローラーでプロジェクトを開いた状態で、[ツール]>[コマンド ライン]>[開発者コマンド プロンプト] を選択してコマンド プロンプトを開きます。
コマンド プロンプトはプロジェクト ディレクトリで開きます。
コマンド
nuget pack
を実行します。NuGet で、現在のフォルダー内に identifier.version.nupkg の形式で .nupkg ファイルが生成されます。
パッケージを公開する
.nupkg ファイルを作成したら、NuGet CLI で、nuget.org から取得した API キーを使用してそのファイルを nuget.org に公開します。nuget.org については、nuget.exe
4.1.0 以降を使用する必要があります。
パブリック ギャラリーに公開する前にパッケージをテストして検証する場合は、nuget.org ではなく、int.nugettest.org などのテスト環境にアップロードできます。int.nugettest.org にアップロードされたパッケージは保持されない場合がありますので注意してください。
Note
nuget.org は、アップロードされたすべてのパッケージでウイルスをスキャンし、ウイルスが見つかったパッケージを拒否します。 nuget.org では一覧にあるすべてのパッケージも定期的にスキャンされます。
nuget.org に公開したパッケージは、一覧から削除しない限り、他の開発者に一般公開されます。 パッケージを非公開でホストするには、「独自の NuGet フィードのホスト」を参照してください。
API キーを取得する
ご自分の nuget.org アカウントにサインインするか、まだ持っていなければ、アカウントを作成します。
右上にあるユーザー名を選択し、[API キー] を選択します。
[作成] を選択して、キーの名前を指定します。
[スコープの選択] で [プッシュ] を選択します。
[パッケージの選択]>[glob パターン] に「*」と入力します。
[作成] を選択します
[コピー] を選択して新しいキーをコピーします。
重要
- API キーは誰にも教えないでください。 API キーはパスワードのようなものであり、API キーを使うと、誰でもお客様に代わってパッケージを管理できるようになります。 API キーが誤って漏えいした場合は、削除または再生成してください。
- 後でもう一度キーをコピーすることはできないため、キーを安全な場所に保存しておいてください。 [API キー] ページに戻ったら、キーを再生成してコピーする必要があります。 パッケージをプッシュする必要がなくなった場合は、API キーを削除することもできます。
スコープを使用して、別の目的のために別の API キーを作成できます。 各キーには有効期限の時間枠があり、特定のパッケージ (またはの glob パターン) に対してスコープを設定できます。 また、各キーのスコープは、「新しいパッケージとパッケージ バージョンのプッシュ」、「新しいパッケージ バージョンのプッシュのみ」、「またはリストから外す」など、特定の操作に限定して設定します。
組織のパッケージ管理を行う担当者が必要なアクセス許可以外は持たないように、スコープを使用して、担当者ごとに API キーを作成できます。
詳しくは、「スコープ設定された API キー」をご覧ください。
NuGet CLI を使用して公開する
.NET CLI を使用する代わりに、NuGet CLI (nuget.exe) を使用する方法があります。
コマンド プロンプトを開き、.nupkg ファイルを含むフォルダーに変更します。
次のコマンドを実行します。 <パッケージファイル名>をパッケージのファイル名に置き換え、<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」を参照してください。
公開エラー
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
パッケージのインデックスが作成され、検索結果に表示されて他のユーザーが検索できるようになるまでに、時間がかかる場合があります。 その間、パッケージは [一覧に含まれないパッケージ] の下に表示され、パッケージ ページには次のメッセージが表示されます。
これで、NuGet パッケージが nuget.org に公開されました。他の開発者はこのパッケージを自身のプロジェクトで使用することができます。
役に立たないパッケージ (空のクラス ライブラリを使用して作成されたこのサンプル パッケージなど) を作成した場合、またはパッケージを公開しない場合は、検索結果で非表示になるように、パッケージをリストから外すことができます。
パッケージが [パッケージの管理] ページの [公開済みパッケージ] の下に表示されたら、パッケージの一覧の横にある鉛筆アイコンを選択します。
次のページで、[リスト] を選択し、[検索結果に表示] チェックボックスの選択を解除して、[保存] を選択します。
パッケージは、[パッケージの管理] の [一覧に含まれないパッケージ] の下に表示され、検索結果に表示されなくなります。
Note
テスト パッケージが nuget.org で公開されないようにするには、nuget.org のテスト サイト (https://int.nugettest.org) にプッシュします。int.nugettest.org にアップロードされたパッケージは保持されない場合があることに注意してください。
次のステップ
これで、Visual Studio .NET Framework を使用して NuGet パッケージを作成しました。 次の記事に進み、NuGet CLI を使用して NuGet パッケージを作成する方法を学習してください。
NuGet が提供する機能の詳細については、次の記事を参照してください。