2010年10月24日日曜日

NuGet(以前はNuPack)で簡単インストール

※NuPackはNuGetという名称に変更されました。リンク修正済み


オープンソースライブラリを簡単に開発環境にインストールできるNuGetがリリースされた。いわゆるパッケージ管理システムだ。Visual Studioに統合されていて、どのバージョンでも使用できるようだ(ちなみに今回はVisual Studio 2010 Ultimateを使用している)。NuGetのインストール方法は簡単だ。下記のリンクからNuGet.Tools.vsixをダウンロードしてダブルクリックするだけだ。

NuGet
サイト右側のDownloadリンクから取得しよう。
※NuGetはいくつか問題が報告されていて私もはじめは使用できなかったので対処法を後述する。
Known Issues With NuGet CTP 1

NuGetを使うと何が便利かというと、ライブラリのインストール(設定を含む)をすべて自動で行ってくれることだ。以前当ブログでも解説したElmahの設定なども自動で設定してくれて、すぐに使用できるようになる。また、複雑な依存関係があるようなNHibernate.Linqなどもすべて自動で設定してくれる。さらにNuGetの素晴らしいところはシステムレベルでは何もインストールしないので環境が汚染されることを心配しなくてよい。

では実際にNuGetを使用してみよう。NuGetの説明ではElmahが引っ張りだこなので同じ内容をやるのは気が引けるが、以前マニュアルでの導入方法を解説したこともあるのでここでもElmahの設定方法を解説する。

インストール後にVisual Studioを起動して適当にASP.NET MVCのプロジェクトを作成し、View → Other Windowを開くとPackage Manager Consoleがあるので選択しよう。ちなみに下図でPackage Manager Consoleの項目が二つあるのも既知のバグだ。ここではASP.NET MVCのプロジェクトを使用しているが、もちろんASP.NETのプロジェクトでも問題ないし、WPF、Silverlightなど、どのようなプロジェクトでもNuGetは使用可能だ。


Package Manager ConsoleでList-Packageと入力すると下図のリストが一覧できる。これはNuGetを使用して自動でインストールできるライブラリの一覧だ。


ついでAdd-Package elmahと入力する。これでインストール完了だ。いたって簡単。ReferencesにElmahが追加されているのが分かると思う。


またWeb.configにも必要な設定が追加されている。以前解説したのとは違い、ここではIn-Memoryにエラーをログするようになっている。


http://localhost:2430/elmah.axdにアクセスすると下図のElmahのエラーログページが表示されるはずだ。


以上コマンドラインでのインストール方法を解説したが、GUIで行う方法もある。Referencesを右クリックしてAdd Package Referenceを選択しよう。


Visual Studio 2010で馴染み深い下図のダイアログがポップアップするので、目当てのライブラリを検索する。


ライブラリが見つかったらInstallボタンをクリックしよう。



と、簡単にライブラリがインストールできるのが分かったと思うので、気になるライブラリがあったらガンガン導入して評価してみると良いだろう。

ここから既知のバグの対処法をいくつか紹介する。

・NuGetがアンインストールできない
管理者権限でVisual Studioを実行しないとTools → Extension Managerで表示されるダイアログのNuGetの項目にあるUninstallボタンが無効化されているので注意しよう。

・View → Other WindowsにPackage Manager Consoleがない
・Package Manager Consoleを実行するとSystem.Security.AccessControl.ObjectSecurityExceptionが表示される
どうやらReflectorのAddinをインストールしてあるとこれらの現象が発生するようだ。下記リンクを参考にReflectorのアドインを削除しよう。
方法: アドインを非アクティブにして削除する

・View → Other WindowsにPackage Manager Consoleが2つある
NuGetをインストールする以前にPower Shellをインストールしてあるとこうなってしまうようだ。ちなみにこれの解決方法はないそうだ。

0 件のコメント:

コメントを投稿