プライベートなnugetパッケージを作る

  • 38
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

nuspecファイルの作成

.csproj ファイルと同じディレクトリにnuspecファイルを作成する。

hogehoge.csproj なら hogehoge.nuspec という名前でファイルを作成する。

nuspecファイルのテンプレ

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <description>$description$</description>
    <dependencies>
        <dependency id="hogehoge" version="1.0" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Release\sub.dll" target="Content\net452" />
  </files>
</package>

$idなどのマクロは、アセンブリ情報(AssemblyInfo.cs)と対応している

マクロ 概要
$id アセンブリ名
$version$ アセンブリバージョン
$title$ タイトル
$author$ 会社
$description$ 説明

パッケージの依存関係

ソリューション内に複数のプロジェクトがあり、それぞれ個別にパッケージを作成する場合、
パッケージの依存関係を定義しておく必要がある。

プロジェクト libA は、別のプロジェクト libBlibC に依存している場合に
libAのnugetパッケージを作成した場合、libBlibCは、パッケージに入らない。

libA ┓
     ┠ libB
     ┠ libC

プロジェクト libD に nugetからlibAを取得した場合、libBlibCが存在しないため、
libAがlibBやlibCを参照しようとすると例外が発生する。

libD ┓
     ┠ libA

依存関係の指定

libAは、libB、libCに依存しているので、次のようにnuspecファイルに記述しておく。

<dependencies>
   <dependency id="libB" version="1.0" />
   <dependency id="libC" version="1.0" />
</dependencies>

これでlibAの導入時にlibB、libCも同時に導入されるようになる。

  • versionを指定しない場合、最新バージョンを取得する。
  • nugetからlibBやlibCを導入した場合は、記述の必要はない。

依存ファイルを含める

nugetでないDLLや画像などのリソースは、filesに指定する。

<files>
   <file src="bin\Release\sub.dll" target="Content\net452" />
</files>

bin\Release*は、リリースビルド先のフォルダを指している。
*
target
は、パスの形式がいくつか決まっている。

種別 概要
Content 参照設定を行わずファイルを追加する
lib 指定されたファイルを参照設定に登録する

nugetで導入時に参照設定にdllを追加する
xml
<file src="bin\Release\sub.dll" target="lib\net452" />

nugetで導入時にプロジェクトにファイルを追加する
xml
<file src="bin\Release\sub.dll" target="Content\net452" />


パッケージの作成

NuGet.exeを使用してパッケージを作成できる。

NuGet.exe pack "d:\codes\hogehoge.csproj" -Prop Configuration=Release -Symbol -OutputDirectory "d:\MyRepository"
  • "d:\MyRepository" にnugetパッケージが作成される。
  • Configuration=Release を指定しておくと、リリースビルドしたものがパッケージ化される。
  • NuGet.exe packする前にVSでビルドしておくこと。