NuGet.Server を立てた時にちょいハマったこと

きっかけ

BuildInsider の 社内の開発環境の改善&効率化のためにNuGetを活用しよう を読んで、前々から立ててみたかったので衝動的に早起きしてやってみた。結構仕事内でも、社内で特殊なビルドして使ってるライブラリとかもあるので使えるんじゃないかなーと。

NuGet push が失敗する

NuGet.Server の構築は簡単に済んで、ビルドしたものを社内のサーバー機に配置してみた。環境は Windows Server 2008 x64, IIS 7.5 である。

パッケージの配置フォルダはデフォルト通りなので、Web アプリ内のPackagesフォルダになる。

発生したエラー

> nuget push {ホストするパッケージ}.nupkg -s http://{nugetサーバーのホスト}/{仮想ディレクトリ名} {APIキー}
Please provide credentials for: http://{nugetサーバーのホスト}/{仮想ディレクトリ名}
UserName: {入力する}
Password: {入力する}

この UserName や Password はサーバーの Administrator の情報を入れてもだめ。。web.config の設定もいろいろと見なおしてみたが、認証がかかるような事はしていない。

解決

いろいろ試した結果、最終的には以下で成功した。

> nuget push {ホストするパッケージ}.nupkg -s http://{nugetサーバーのホスト}/{仮想ディレクトリ名}/api/v2/package/ {APIキー}
Pushing {ホストするパッケージ} to 'http://{nugetサーバーのホスト}/{仮想ディレクトリ名}/api/v2/package/'...
Your package was pushed.

ヒントになったのは以下のサイト。

Nuget.Server configuration problem

結局不具合だったのか、サーバーとの相性が悪かったのか、釈然とはしないのですがとりあえず動作したのでよしと。

最後の回避策

サーバー機のパッケージフォルダに直接 nupkg を入れれば同じなので、コマンドで入れられない場合はそうすればいいかなと思います。ただどうせ社内で使うなら、普通に共有フォルダ形式でやるのが楽だったか。。