クイック スタート: Visual Studio を使用した NuGet パッケージの作成と公開 (.NET Standard、Windows のみ)Quickstart: Create and publish a NuGet package using Visual Studio (.NET Standard, Windows only)

Windows の Visual Studio で .NET Standard クラス ライブラリから NuGet パッケージを作成し、CLI ツールを使用してパッケージを nuget.org に公開する簡単なプロセスです。It's a simple process to create a NuGet package from a .NET Standard Class Library in Visual Studio on Windows, and then publish it to nuget.org using a CLI tool.

注意

Visual Studio for Mac をお使いの場合は、NuGet パッケージの作成に関するこちらの情報を参照するか、dotnet CLI ツールをご使用ください。If you are using Visual Studio for Mac, refer to this information on creating a NuGet package, or use the dotnet CLI tools.

前提条件Prerequisites

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

  2. まだインストールされていない場合、dotnet CLI をインストールします。If it's not already installed, install the dotnet CLI.

    dotnet CLI について、Visual Studio 2017 以降、dotnet CLI は .NET Core 関連のワークロードと共に自動的にインストールされます。For the dotnet CLI, starting in Visual Studio 2017, the dotnet CLI is automatically installed with any .NET Core related workloads. それ以外の場合は、.NET Core SDK をインストールして dotnet CLI を取得します。Otherwise, install the .NET Core SDK to get the dotnet CLI. SDK スタイルの形式 (SDK 属性) を使用する .NET Standard プロジェクトには、dotnet CLI が必要です。The dotnet CLI is required for .NET Standard projects that use the SDK-style format (SDK attribute). Visual Studio 2017 以降の既定の .NET Standard クラス ライブラリ テンプレート (この記事で使用するものです) では、SDK 属性が使用されます。The default .NET Standard class library template in Visual Studio 2017 and higher, which is used in this article, uses the SDK attribute.

    重要

    非 SDK スタイルのプロジェクトを使用している場合は、代わりに .NET Framework パッケージの作成と公開 (Visual Studio) に関するページの手順に従って、パッケージの作成と公開を行ってください。If you are working with a non-SDK-style project, follow the procedures in Create and publish a .NET Framework package (Visual Studio) to create and publish the package instead. この記事では、dotnet CLI を使用することをお勧めします。For this article, the dotnet CLI is recommended. nuget.exe CLI を使用してもあらゆる NuGet パッケージを公開できますが、この記事の手順の一部は SDK スタイルのプロジェクトと dotnet CLI に固有のものです。Although you can publish any NuGet package using the nuget.exe CLI, some of the steps in this article are specific to SDK-style projects and the dotnet CLI. nuget.exe CLI は、非 SDK 形式のプロジェクト (通常は .NET Framework) 用に使用されます。The nuget.exe CLI is used for non-SDK-style projects (typically .NET Framework).

  3. まだ持っていない場合は、nuget.org で無料アカウントを登録します。Register for a free account on nuget.org if you don't have one already. 新しいアカウントを作成すると、確認メールが送信されます。Creating a new account sends a confirmation email. パッケージをアップロードするには、その前にアカウントを確認する必要があります。You must confirm the account before you can upload a package.

クラス ライブラリ プロジェクトを作成するCreate a class library project

パッケージ化するコードに既存の .NET Standard クラス ライブラリ プロジェクトを使用することも、次の手順に従って単純なプロジェクトを作成することもできます。You can use an existing .NET Standard Class Library project for the code you want to package, or create a simple one as follows:

  1. Visual Studio で、 [ファイル]、[新規]、[プロジェクト] の順に選択し、 [Visual C#]、[.NET Standard] ノードの順に展開して "クラス ライブラリ (.NET Standard)" テンプレートを選択し、プロジェクトに AppLogger という名前を付け、 [OK] をクリックします。In Visual Studio, choose File > New > Project, expand the Visual C# > .NET Standard node, select the "Class Library (.NET Standard)" template, name the project AppLogger, and click OK.

    ヒント

    それ以外を選択する理由がない限り、.NET Standard は最も広い範囲の使用プロジェクトとの互換性を提供するため、NuGet パッケージの優先ターゲットです。Unless you have a reason to choose otherwise, .NET Standard is the preferred target for NuGet packages, as it provides compatibility with the widest range of consuming projects.

  2. 作成されたプロジェクト ファイルを右クリックし、 [ビルド] を選択して、プロジェクトが正しく作成されたことを確認します。Right-click on the resulting project file and select Build to make sure the project was created properly. DLL は、デバッグ フォルダー (または代わりにその構成をビルドした場合はリリース フォルダー) 内にあります。The DLL is found within the Debug folder (or Release if you build that configuration instead).

実際の NuGet パッケージ内ではもちろん、多くの便利な機能を実装し、他のユーザーはそれを使用してアプリケーションをビルドできます。Within a real NuGet package, of course, you implement many useful features with which others can build applications. しかし、このチュートリアルでは、パッケージを作成するには、テンプレートのクラス ライブラリで十分なため、追加のコードを記述することはありません。For this walkthrough, however, you won't write any additional code because a class library from the template is sufficient to create a package. それでも、パッケージの一部の機能コードが必要な場合は、次のように使用します。Still, if you'd like some functional code for the package, use the following:

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

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

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] メニュー コマンドを選択してから、 [パッケージ] タブを選択します。Right-click the project in Solution Explorer, and choose Properties menu command, then select the Package tab.

    [パッケージ] タブは、Visual Studio の SDK スタイルのプロジェクト (通常は .NET Standard または .NET Core クラス ライブラリ プロジェクト) に対してのみ表示されます。非 SDK スタイルのプロジェクト (通常は .NET Framework) をターゲットとしている場合は、プロジェクトを移行するか、.NET Framework パッケージの作成と公開に関するページの詳細な手順をご覧ください。The Package tab appears only for SDK-style projects in Visual Studio, typically .NET Standard or .NET Core class library projects; if you are targeting a non-SDK style project (typically .NET Framework), either migrate the project or see Create and publish a .NET Framework package instead for step-by-step instructions.

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

    注意

    公開用にビルドされたパッケージの場合は、Tagsプロパティに特に注意してください。これらのタグは他のユーザーがパッケージを検索して、パッケージの動作を理解するのに役立ちます。For packages built for public consumption, pay special attention to the Tags property, as tags help others find your package and understand what it does.

  2. パッケージに一意の識別子を付けて、他の必要なプロパティを指定します。Give your package a unique identifier and fill out any other desired properties. MSBuild プロパティ (SDK スタイルのプロジェクト) から .nuspec 内のプロパティへのマッピングについては、「pack ターゲット」ご覧ください。For a mapping of MSBuild properties (SDK-style project) to properties in a .nuspec, see pack targets. プロパティの説明については、.nuspec ファイル リファレンスに関するページをご覧ください。For descriptions of properties, see the .nuspec file reference. これらのプロパティはすべて、Visual Studio でプロジェクト用に作成された .nuspecマニフェストに保存されます。All of the properties here go into the .nuspec manifest that Visual Studio creates for the project.

    重要

    パッケージには、nuget.org または使用しているホスト全体で一意の識別子を付ける必要があります。You must give the package an identifier that's unique across nuget.org or whatever host you're using. このチュートリアルでは、以降の公開手順でパッケージを一般公開するので (ただし、誰かが実際に使用する可能性はありません)、名前に "Sample" または "Test" を含めることをお勧めします。For this walkthrough we recommend including "Sample" or "Test" in the name as the later publishing step does make the package publicly visible (though it's unlikely anyone will actually use it).

    既に存在する名前のパッケージを公開しようとすると、エラーが表示されます。If you attempt to publish a package with a name that already exists, you see an error.

  3. (省略可能) プロジェクト ファイルで直接プロパティを表示するには、ソリューション エクスプローラーでプロジェクトを右クリックし、 [Edit AppLogger.csproj](AppLogger.csproj の編集) を選択します。(Optional) To see the properties directly in the project file, right-click the project in Solution Explorer and select Edit AppLogger.csproj.

    このオプションは、Visual Studio 2017 以降で、SDK スタイルの属性を使用するプロジェクトに対してのみ使用できます。This option is only available starting in Visual Studio 2017 for projects that use the SDK-style attribute. それ以外の場合は、プロジェクトを右クリックして [プロジェクトのアンロード] を選択します。Otherwise, right-click the project and choose Unload Project. 次に、アンロードされたプロジェクトを右クリックし、 [Edit AppLogger.csproj](AppLogger.csproj の編集) を選択します。Then right-click the unloaded project and choose Edit AppLogger.csproj.

pack コマンドを実行するRun the pack command

  1. 構成を [リリース] に設定します。Set the configuration to Release.

  2. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [パック] コマンドを選択します。Right click the project in Solution Explorer and select the Pack command:

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

    [パック] コマンドが表示されない場合は、プロジェクトがおそらく SDK スタイルのプロジェクトではないため、nuget.exe CLI を使用する必要があります。If you don't see the Pack command, your project is probably not an SDK-style project and you need to use the nuget.exe CLI. プロジェクトを移行して dotnet CLIを使用するか、代わりに .NET Framework パッケージの作成と公開に関するページの詳細な手順をご覧ください。Either migrate the project and use dotnet CLI, or see Create and publish a .NET Framework package instead for step-by-step instructions.

  3. Visual Studio により、プロジェクトがビルドされ、.nupkg ファイルが作成されます。Visual Studio builds the project and creates the .nupkg file. [出力] ウィンドウで (次のような) 詳細を確認します。このウィンドウには、パッケージ ファイルへのパスが表示されます。Examine the Output window for details (similar to the following), which contains the path to the package file. ビルドされたアセンブリは .NET Standard 2.0 ターゲットに適合するため bin\Release\netstandard2.0 にもあります。Note also that the built assembly is in bin\Release\netstandard2.0 as befits the .NET Standard 2.0 target.

    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 ==========
    

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

プロジェクトのビルド時に NuGet パッケージを自動的に生成するように、Visual Studio を構成できます。You can configure Visual Studio to automatically generate the NuGet package when you build the project.

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] を選択します。In Solution Explorer, right-click the project and choose Properties.

  2. [パッケージ] タブで、 [ビルド時に NuGet パッケージを生成] を選択します。In the Package tab, select Generate NuGet package on build.

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

注意

パッケージを自動的に生成する場合、パックする時間によってプロジェクトのビルド時間が長くなります。When you automatically generate the package, the time to pack increases the build time for your project.

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

NuGet 4.x 以降と MSBuild 15.1 以降では、Pack メニュー コマンドを使用する代わりに、プロジェクトに必要なパッケージ データが含まれている場合に pack ターゲットをサポートしています。As an alternate to using the Pack menu command, NuGet 4.x+ and MSBuild 15.1+ supports a pack target when the project contains the necessary package data. コマンド プロンプトを開き、プロジェクト フォルダーに移動し、次のコマンドを実行しますOpen a command prompt, navigate to your project folder and run the following command. (MSBuild に必要なすべてのパスが構成されるため、通常は [スタート] メニューの [Developer Command Prompt for Visual Studio](Visual Studio 用開発者コマンド プロンプト) を使用します)。(You typically want to start the "Developer Command Prompt for Visual Studio" from the Start menu, as it will be configured with all the necessary paths for MSBuild.)

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

パッケージを公開するPublish the package

.nupkg ファイルを作成したら、nuget.exe CLI または dotnet.exe CLI と、nuget.org から取得した API キーを使用して、そのファイルを nuget.org に公開します。Once you have a .nupkg file, you publish it to nuget.org using either the nuget.exe CLI or the dotnet.exe CLI along with an API key acquired from nuget.org.

注意

ウイルス スキャン: nuget.org にアップロードされたすべてのパッケージはウイルス スキャンが行われ、ウイルスが見つかった場合には拒否されます。Virus scanning: All packages uploaded to nuget.org are scanned for viruses and rejected if any viruses are found. nuget.org の一覧にあるすべてのパッケージも定期的にスキャンされます。All packages listed on nuget.org are also scanned periodically.

nuget.org に公開したパッケージは、一覧から削除しない限り、他の開発者にも一般公開されます。Packages published to nuget.org are also publicly visible to other developers unless you unlist them. パッケージを非公開でホストするには、パッケージのホスティングに関するページを参照してください。To host packages privately, see Hosting packages.

API キーを取得するAcquire your API key

  1. ご自分の nuget.org アカウントにサインインするか、まだ持っていなければ、アカウントを作成します。Sign into your nuget.org account or create an account if you don't have one already.

    アカウントの作成について詳しくは、「個人アカウント」をご覧ください。For more information on creating your account, see Individual accounts.

  2. (右上で) ユーザー名を選択し、 [API キー] を選択します。Select your user name (on the upper right), then select API Keys.

  3. [作成] を選択し、キーの名前を指定して、 [スコープの選択] > [プッシュ] の順に選択します。Select Create, provide a name for your key, select Select Scopes > Push. [glob パターン] に「*」と入力してから、 [作成] を選択します。Enter * for Glob pattern, then select Create. (スコープの詳細については、後述の説明をご覧ください。)(See below for more about scopes.)

  4. キーが作成されたら、 [コピー] を選択して、CLI で必要となるアクセス キーを取得します。Once the key is created, select Copy to retrieve the access key you need in the CLI:

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

  5. 重要: キーは、後でもう一度コピーできないため、安全な場所に保存してください。Important: Save your key in a secure location because you cannot copy the key again later on. [API キー] ページに戻ったら、キーを再生成してコピーする必要があります。If you return to the API key page, you need to regenerate the key to copy it. CLI を通じてパッケージをプッシュする必要がなくなった場合は、API キーを削除することもできます。You can also remove the API key if you no longer want to push packages via the CLI.

スコープを使用して、別の目的のために別個の API キーを作成できます。Scoping allows you to create separate API keys for different purposes. 各キーは有効期限の時間枠を備え、特定のパッケージ (またはの glob パターン) に対してスコープを設定できます。Each key has its expiration timeframe and can be scoped to specific packages (or glob patterns). また、各キーは、新しいパッケージと更新のプッシュ、更新のプッシュのみ、リストからの除外など、特定の操作に対してもスコープを設定します。Each key is also scoped to specific operations: push of new packages and updates, push of updates only, or delisting. スコープを使用して、必要なアクセス許可以外は持たない組織のパッケージ管理を行う別の担当者のために、API キーを作成できます。Through scoping, you can create API keys for different people who manage packages for your organization such that they have only the permissions they need. 詳しくは、「スコープ設定された API キー」をご覧ください。For more information, see scoped API keys.

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

CLI ツールのタブ ( .NET Core CLI (dotnet cli) または NuGet (nuget.exe CLI)) を選択します。Select the tab for your CLI tool, either .NET Core CLI (dotnet CLI) or NuGet (nuget.exe CLI).

nuget.exe を使用する代わりに、この手順を使用することをお勧めします。This step is the recommended alternative to using nuget.exe.

パッケージを公開するには、まずコマンド ラインを開く必要があります。Before you can publish the package, you must first open a command line.

  1. .nupkg ファイルを含むフォルダーに変更します。Change to the folder containing the .nupkg file.

  2. 使用するパッケージ名 (一意のパッケージ ID) を指定し、キーの値を使用する API キーに置き換えて、次のコマンドを実行します。Run the following command, specifying your package name (unique package ID) and replacing the key value with your API key:

    dotnet nuget push AppLogger.1.0.0.nupkg -k qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 -s https://api.nuget.org/v3/index.json
    
  3. dotnet により、公開プロセスの結果が表示されます。dotnet displays the results of the publishing process:

    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」を参照してください。See dotnet nuget push.

公開エラーPublish errors

push コマンドのエラーは、通常、問題があることを示します。Errors from the push command typically indicate the problem. たとえば、プロジェクトのバージョン番号の更新を忘れて、既に存在するパッケージを公開しようとした場合などがあります。For example, you may have forgotten to update the version number in your project and are therefore trying to publish a package that already exists.

また、ホストに既に存在する識別子を使用してパッケージを公開しようとするとエラーが表示されます。You also see errors when trying to publish a package using an identifier that already exists on the host. たとえば、"AppLogger" という名前は既に存在します。The name "AppLogger", for example, already exists. その場合、push コマンドを実行すると、次のエラーが表示されます。In such a case, the push command gives the following error:

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 キーを使用している場合、エラーの "アクセス許可" 部分では完全には明白ではありませんが、このメッセージは名前の競合を示します。If you're using a valid API key that you just created, then this message indicates a naming conflict, which isn't entirely clear from the "permission" part of the error. パッケージ識別子を変更し、プロジェクトをリビルドして、 .nupkg ファイルを再作成した後、push コマンドを再試行します。Change the package identifier, rebuild the project, recreate the .nupkg file, and retry the push command.

公開済みパッケージを管理するManage the published package

nuget.org のプロファイルから、 [パッケージの管理] を選択して、公開したパッケージを確認します。From your profile on nuget.org, select Manage Packages to see the one you just published. 確認メールも送信されます。You also receive a confirmation email. パッケージがインデックス作成され、他のユーザーが検索して検索結果に表示されるようになるまでには、時間がかかる場合があることに注意してください。Note that it might take a while for your package to be indexed and appear in search results where others can find it. この間、パッケージのページに次のメッセージが表示されます。During that time your package page shows the message below:

このパッケージはまだインデックスされていません。

これで終了です。And that's it! 最初の NuGet パッケージが nuget.org に公開され、他の開発者はそれを自身のプロジェクトで使用することができます。You've just published your first NuGet package to nuget.org that other developers can use in their own projects.

このチュートリアルで作成したパッケージが、実際に有用ではない場合 (空のクラス ライブラリを使用して作成されたパッケージなど)、そのパッケージを一覧から削除して、検索結果に表示されないようにする必要があります。If in this walkthrough you created a package that isn't actually useful (such as a package created with an empty class library), you should unlist the package to hide it from search results:

  1. nuget.org で、ユーザー名 (ページの右上) を選択し、 [パッケージの管理] を選択します。On nuget.org, select your user name (upper right of the page), then select Manage Packages.

  2. [公開済み] の一覧から削除するパッケージを見つけて、右側のごみ箱のアイコンを選択します。Locate the package you want to unlist under Published and select the trash can icon on the right:

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

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

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

ReadMe とその他のファイルの追加Adding a readme and other files

パッケージに含めるファイルを直接指定するには、プロジェクト ファイルを編集して、content プロパティを使用します。To directly specify files to include in the package, edit the project file and use the content property:

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

これにより、パッケージ ルートに readme.txt という名前のファイルが含まれます。This will include a file named readme.txt in the package root. Visual Studio では、パッケージを直接インストールした直後、そのファイルの内容がプレーンテキストとして表示されます。Visual Studio displays the contents of that file as plain text immediately after installing the package directly. (パッケージが依存関係としてインストールされた場合、ReadMe ファイルは表示されません。)(Readme files are not displayed for packages installed as dependencies). たとえば、HtmlAgilityPack パッケージの ReadMe は次のように表示されます。For example, here's how the readme for the HtmlAgilityPack package appears:

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

注意

プロジェクトのルートに readme.txt を追加するだけでは、作成されたパッケージに含まれません。Merely adding the readme.txt at the project root will not result in it being included in the resulting package.

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