雑記
 

NuGetでパッケージを公開する

2021/4/25

この記事が対象とする製品・バージョン

VS2019 Visual Studio 2019 対象です。
VS2017 Visual Studio 2017 × 対象外です。
VS2015 Visual Studio 2015 × 対象外です。
VS2013 Visual Studio 2013 × 対象外です。
VS2012 Visual Studio 2012 × 対象外です。
VS2010 Visual Studio 2010 × 対象外です。
VS2008 Visual Studio 2008 × 対象外です。
VS2005 Visual Studio 2005 × 対象外です。
VS.NET 2003 Visual Studio 2003 × 対象外です。
VS.NET 2002 Visual Studio (2002) × 対象外です。

目次

 

1.概要

自作のプログラムを NuGet で公開する方法を説明します。

NuGetで公開すると世界中のユーザーがVisual Studioなどを使って「パッケージ」としてあなたのプログラムを使用できるようになります。

この記事では、私が Umyadia.Database.HistoricalTimeline というパッケージを実際に NuGet で公開した時のやりかたになぞって説明します。

 

私はこの記事の内容を下記の環境で実施しました。環境が異なる場合画面や操作方法が大きく異なる場合があります。

 

参考

.NET Standard NuGet パッケージの作成と公開 - Windows 上の Visual Studio | Microsoft Docs

 

2.プログラム作成

まずは公開するプログラムを作成します。既に作成済みのプログラムを利用することもできます。

プロジェクトの種類は クラスライブラリ にします。

一度 NuGet で公開すると修正はできません。十分にテストしてください。

※新しいバージョンを公開したり、公開を停止したりすることはできます。

テストが完了したら次のステップに進みます。

 

3.パッケージ情報を設定

3-1.ライセンス情報

NuGetで公開するためにライセンス情報が必須です。

他のユーザーにどのような条件で使用を許諾するかライセンスを設定します。

そのために、ソリューションエクスプローラーでプロジェクトを右クリックし、プロパティ画面を表示します。

プロパティ画面では、パッケージページのライセンスの式欄でライセンスを設定します。

次のような値を指定できます。

※法律的な詳細を含むと説明が複雑になるのでここでは概要だけ紹介します。詳しくは自分で調べてください。この記事はここで記述する内容について何の法的保証もしません。

概要
CC0-1.0 著作権フリー。誰でも制約なしに使用できます。
MIT 自由に使用できます。再配布時には著作権表示とライセンス表示を含める必要があります。
Apache-2.0 自由に使用できます。再配布時には著作権表示とライセンス表示を含め、変更した箇所があれば明示する必要があります。

指定可能な値の一覧は下記を参照してください。

https://spdx.org/licenses/

 

※ライセンスはファイルを指定することもできるようです。

 

3-2.その他の情報

その他に必須ではありませんが、下記の情報を設定できるようです。

これらの項目はVisual Studioから使うNuGetパッケージマネージャーやWebブラウザーでNuGetのパッケージを表示・検索するときに使用されます。

これらの項目がどのように設定されているかアップロード時に確認画面に表示されます。

いくつか私には設定方法がわからない項目もあります。

設定項目 設定方法 設定例 備考
Package ID パッケージページの パッケージID Umayadia.Database.HistoricalTimeline  
Version パッケージページの パッケージバージョン 1.0.1
Owner (わかりません) rucio  
Minumum NuGet Client Version      
License file/License expression パッケージページの ライセンス MIT (上述)
Language (わかりません)    
Development Dependency      
Dependencies      
Title プロジェクトファイルの Title (後述) Umayadia.Database.HistoricalTimeline  
Description パッケージページの 説明 Utility functions to use xxxx.  
Summary プロジェクトファイルの Summary?? (後述) Utility functions to use xxxx. パッケージの検索画面に表示される?
Release Notes パッケージページの リリースノート https://xxx.xxx.net/xxx.htm
Project URL パッケージページの プロジェクトURL https://xxx.xxx.net/xxx.htm  
Repository Type パッケージページの リポジトリ種類 git
Repository URL パッケージページの リポジトリURL https://github.com/xxx/xxx  
Icon URL パッケージページの アイコンファイル packageIcon.png  
Authors パッケージページの 作成者 rucio
Copyright パッケージページの 著作権 Copyright © rucio 2021  
Tags パッケージページの タグ Web,Convert カンマで区切って複数指定可能
Require License Acceptance パッケージページの ライセンスの同意が必要 (チェックする)  

参考:NuGetターゲットとしてのパックと復元 MSBuild | Microsoft Docs

 

設定方法が「プロジェクトファイルの」となっているものは、プロジェクトファイル(拡張子がcsproj または vbproj のファイルなど)を直接編集して設定できます。Visual Studioのソリューションエクスプローラーでプロジェクトをダブルクリックするのが楽です。Visual Studioではなくメモ帳等で編集してもOKです。プロジェクトファイルは XML形式になっており、書き込む場所は <Project> - <PropertyGroup> の直下です。

上の表で 「パッケージページの」となっているものも、結局はプロジェクトファイルの同じ場所に書き込まれます。

たとえば、次のようになります。

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <PackageLicenseExpression>MIT</PackageLicenseExpression>
        <Title>Umayadia.Database.HistoricalTimeline</Title>
        <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
        <PackageId>Umayadia.Database.HistoricalTimeline</PackageId>
        <Version>1.0.1</Version>
        <Authors>rucio</Authors>
        <Company>Umayadia</Company>
        <Product>Umayadia.Database.HistoricalTimeline</Product>
        <Description>Utility functions to use xxxx.</Description>
        <Summary>Utility functions to use xxxx.</Summary>
        <Copyright>Copyright © rucio 2021</Copyright>
        <PackageProjectUrl>https://www.umayadia.com/main/main.htm</PackageProjectUrl>
        <RepositoryUrl>https://github.com/xxx/xxx</RepositoryUrl>
        <RepositoryType>git</RepositoryType>
        <PackageTags>Web,Convert</PackageTags>
        <PackageReleaseNotes>https://www.umayadia.com/main/main.htm</PackageReleaseNotes>
        <NeutralLanguage>en-US</NeutralLanguage>
        <AssemblyVersion>1.0.0.0</AssemblyVersion>
        <FileVersion>1.0.0.0</FileVersion>
    </PropertyGroup>

</Project>

 

 

4.パッケージ作成

ソリューションの構成を Release にして、対象のクラスライブラリを右クリックして パック を選択します。

 

プロジェクトの bin\Relese フォルダーに拡張子 nupkg のファイルが作成されます。

これが NuGet にアップロードするパッケージの本体です。

 

5.パッケージのアップロード

5-1.NuGet にサインイン

ブラウザーで NuGet の Webサイトにアクセスします。

https://www.nuget.org/

 

画面上部にある Upload をクリックします。

※画面の横幅が狭いと、Uplaod は表示されなくなります。この場合は、右上の 三 をクリックします。

 

マイクロソフトアカウントでのサインインを求められるので、サインインします。

アカウントを持っていない場合は作成します。

 

5-2.二要素認証の有効化

Enable 2FA for NuGet.org をクリックし、二要素認証を有効化します。

この画面が表示されない場合は、ユーザー名をクリックし、メニューの Account Settings をクリックし、 Login Account で「Two-factor authentication is currently disabled」と書いてある右の「Enable」ボタンをクリックして有効化します。

 

5-3.アップロード

画面上部の Upload のリンク または、ユーザー名をクリックして表示されるメニューの Upload Package をクリックします。

Browseボタンをクリックして、先ほど Visual Studio の パック で作成した nupkg ファイルを指定します。

 

アップロードが完了すると、パッケージに含まれる情報が表示されるので確認します。

何か問題がある場合は目立つように問題が表示されます。

なお、私は Summary を指定しているつもりなので Summary は指定されていないという表示になりました。

 

 

5-4.説明の記載

この画面の下の方にパッケージの説明文を入力できる箇所がありますので、概要やサンプルコードなどを記載します。

この説明文はアップロード後に入力・変更することもできます。

Custom を選択して Markdown形式で説明文を入力するか、説明が記載されているURL・ファイルが指定できます。

 

5-5.決定

確認して問題がなければ 下にある Submit ボタンをクリックします。

 

NuGetによって自動的に内容が検証されます。

悪意のあるプログラムだったりウィルスが混入していないかなどを検証しているのだと思います。検証には数分かかります。

2,3分して、ブラウザーの更新ボタンをクリックすると Status が Listed になりましたが、ページ上部には次の警告が表示されました。

さらに2分くらいすると、うまく警告が消えていました。

 

6.完了

Visual Studio で NuGet で検索するとちゃんとヒットしました。すばらしいですね。