Open13

.NET Frameworkでnugetのパッケージを作成する

forest1forest1

.NET Frameworkでもnuget対応可能
その為のコマンドラインツールが提供されている
ちなみに、作成したnugetパッケージは別にサーバーシステムも不要で、任意のフォルダとかファイルサーバーに置いておくだけで使える。

forest1forest1

nuget化したいプロジェクトの *.csproj ファイルがあるフォルダで、

nuget spec

を実行すると、
<プロジェクト名>.nuspec
というファイルが作成される。
中身はこんな感じで

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <!-- <icon>icon.png</icon> -->
    <projectUrl>http://project_url_here_or_delete_this_line/</projectUrl>
    <description>$description$</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>$copyright$</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
</package>

必要に応じて、projectUrl、releaseNotes, tagsとかを埋めていく。"$~$"なところは自動で埋められる。

forest1forest1

プロジェクトをビルド後、プロジェクトフォルダ直下で以下を実行すると、

nuget pack

<プロジェクト名>.<バージョン>.nupkg
という規則でnugetパッケージが作成される。
これで完成。

forest1forest1

nuget packコマンド打った時に、

Authors is required.
Description is required.

とか怒られた場合は、プロジェクトのアセンブリ情報を埋めておく。
Authrosは会社(AssemblyInfo.csのAssemblyCompany)
Descriptionは説明(AssemblyInfo.csのAssemblyDescription)

forest1forest1

ビルド後イベントで自動実行するなら、
プロジェクトファイルが在る場所(.nuspecファイルが在る場所)を付けて、

nuget pack $(ProjectDir)

とすることで、dllと同じ場所にnupkgファイルが生成される。

forest1forest1

パッケージファイル(.nupkg)の公開
オンラインに上げる場合は最初のリンク先読んでちゃんと作って上げること。ここでは言及しない。
ローカルではどこかにnugetパッケージ管理フォルダを作って放り込んでおく、
基準フォルダを作ってその下に任意フォルダを掘って格納しても認識出来る模様。

forest1forest1

ビルド後イベントからCOPYコマンドで自動コピーしても良いかも。

forest1forest1

では、任意のアプリに、作成したnugetコンポーネントをインストールする方法となる。
先ずは初回設定。
メニューのツールから、NuGetパッケージマネジャーの、

パッケージマネージャー設定を開く、

オプション画面でパッケージソースを追加する。

名前は任意で、ソースには格納したパスを設定する。
そのまま C:\~ とか \\fileserver\machineA\~ とかファイルパスでOK。

forest1forest1

さて通常のアプリ開発作業でnugetコンポーネントをインストールする方法。
いつものnuget管理画面を開く、

右のパッケージソースから自分が追加したところを選択する。

さすれば、

自分が作成したパッケージをインストールすることが出来る。

forest1forest1

.NET Frameworkベースのパッケージを作る場合、
そのプロジェクトからさらに外部のnugetパッケージを参照している場合に、
PackageReference だと参照関係の情報がnugetパッケージに載らない。
package.config にしておくこと。

参考
https://tsuna-can.hateblo.jp/entry/2019/07/28/014330