こんばんは。@IT で NuGet 入門記事が全て公開されてほっとしてます、しばやんです。
今回 @IT 向けに記事を書くにあたって、私が持っている s-software.net ドメイン上に NuGet のプライベートリポジトリを構築していろいろと検証を行いました。プライベートリポジトリの構築は記事にも少しだけ書きましたが「Hosting Your Own NuGet Feeds」に作り方が全部書いています。
しかし、私が使っている ExpressWeb だとそのままでは動かなかったので、そのあたりを補足しながら、楽しい NuGet プライベートリポジトリ生活を楽しんで頂きたいと思います。それでは順番に説明していきます。
空の ASP.NET Web アプリケーションを作成
ついつい癖で ASP.NET MVC 3 向けアプリを作ってしまいかけますが、今回は普通の ASP.NET アプリケーションです。しかも空っぽの奴です。
それでは NuGet.Server をインストールしていきましょう。
NuGet.Server パッケージをインストール
Manage NuGet Packages ダイアログで NuGet.Server と入れるとすぐ出てきます。もしくは
Install-Package NuGet.Server
でも問題ないです。インストールが完了するといろいろとファイルが自動的に追加されています。
中でも Packages というディレクトリは実際の NuGet パッケージが格納されるので重要です。
この時点で Packages ディレクトリに NuGet パッケージを入れるとプライベートリポジトリとして動作します。実際にパッケージを入れ、F5 を押して動かしてみましょう。
NuGet.Server の稼働中画面が出ていますね。一番下に出ているパスはローカルで動作させている時だけ表示されるものです。
そして /nuget へアクセスすると OData でいろいろな情報が取れるわけです。実際には /nuget はエントリポイントなので /nuget/Packages へアクセスしてみると、ブラウザではフィードとして認識されます。
アクセスキーを設定
実行した時に表示されたページに、Web.config に apiKey を設定しろと書いてありました。ローカルで Packages ディレクトリを簡単に弄れるのなら設定は不要ですが、リモートサーバで運用する場合にはパッケージの追加がめんどくさいですね。
そんな時 apiKey を設定しておけば NuGet.exe からプッシュできるようになり便利です。
password と書いてますが、適当に変えてください。これで NuGet.exe からプッシュできるようになりました。非常に簡単ですね。
サーバーにデプロイ
それでは ExpressWeb へデプロイしましょうか。サブドメインを割り当てて、普通にアップロードするだけでいいのですが、実際にアクセスすると以下のようなエラーが出ます。
エラーメッセージの通りに multipleSiteBindingsEnabled="true" を serviceModel に追加して対応しましょう。
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel>
これでエラーメッセージが表示されなくなり、プライベートリポジトリが動作するようになります。
これでサーバは動作するようになりましたが、このままだとパッケージの追加が出来ません。原因は Packages ディレクトリに書き込み権限がないからなので、ファイルマネージャから書き込み権限を付けてあげましょう。
パッケージを追加
それではパッケージを追加しましょう。コマンドは NuGet gallery と同じですが、-source でプライベートリポジトリの URL を指定し、apiKey に Web.config に書いたものと同じ文字列を指定します。
nuget push -source (url) MyPackage.1.0.nupkg (apiKey)
たったこれだけです。非常に簡単でしたね!
ASP.NET 4 が動作するサーバなら動くはずなので、構築してテスト用と使うもよし、ローカル限定にして使うもよし。NuGet gallery に登録せずに使えるリポジトリ、これは持っていて損はないと思いますよ!