1. はじめに
ASP.NET MVCはMicrosoft Public License(Ms-PL)が適用されていて、Mono 2.4.2.1から標準で組み込まれるようになりました。
$ gacutil -l System.Web.Mvc The following assemblies are installed into the GAC: System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Number of items = 1
そうなってくると、Mono環境でASP.NET MVCで作成されたWebアプリケーションが実際に動作するか、確認してみたくなります。ありがたいことに、下記のようなASP.NET MVCチュートリアルおよびその完成アプリケーションが、Webで既に公開されています。
ASP.NET MVCチュートリアル:NerdDinner
- Professional ASP.NET MVC 1.0(PDF)
- @IT 「NerdDinnerチュートリアル」
チュートリアルの完成アプリケーション「NerdDinner」
- CodePlex:Nerddinner (NerdDinnerもMs-PLが適用されています)
本稿では、NerdDinner 1.0をLinux(Ubuntu 9.04)上のMono(最終的にApache+mod_mono)環境で動作させること、またそのために行った修正について解説します。
2. 対象読者
- ASP.NET MVCについて関心を持っている人
- Mono環境でASP.NET MVCが動作するか関心をもっている人
3. 必要な環境
以下の環境で動作確認を行いました(VirtualBox 2.2.4を使用しています)。
ホストOS側
- OS: Ubuntu 9.04 Desktop
- Mono 2.4.2.3(XSP、mod_monoを含む)
- DbLinq
- MonoDevelop 2.0
- Apache 2.2
- SQLite3 3.6.10
ゲストOS側
- OS: Windows 7 RC
- SQL Server 2008 Express Edition SP1
- Visual Web Developer 2008 Express edition
- ASP.NET MVC 1.0 RTM
- NUnit Test Project Templates RTM
- NUnit 2.4.8
環境構築時の注意事項
Ubuntu 9.04 Desktopは標準でMono 2.0が導入されていますが、ソースからビルドしてMono 2.4.2.3を導入しました(「/opt/mono/2.4.2.3」配下にインストール)。
ゲストOS側の資源は、ASP.NET MVCプロジェクトの作成、NerdDinnerで使用するDBの内容を調べるのに使用しました。本稿でのNerdDinnerの動作確認自体には必要ありません。
DbLinqはSQLite、PostgreSQL、MySQL、SQL Server、Oracle、Firebird、IngresといったDBへLINQによるアクセスを可能にするオープンソースプロジェクトです。本稿ではリビジョン:r1208の資源を使用しましたので、ダウンロード方法は次のとおりです。
$ svn checkout -r 1208 http://dblinq2007.googlecode.com/svn/trunk/ dblinq2007-read-only
本稿では「DbLinq」「DbLinq.Sqlite」「DbMetal」のアセンブリが必要ですので、「ダウンロード先/dblinq2007-read-only/src/DbLinq.sln」をMonoDevelopで開いて、各々ビルドを行いました。
MonoDevelopからVisual Web Developer 2008 Express editionで作成したASP.NET MVCプロジェクト用ソリューションを開き、ソリューションビューからプロジェクトの[参照]を確認すると、 いくつかのアセンブリがAssenbly not foundとなっています。
原因はアセンブリが存在しない(「System.Web.Mobile」が該当するが、「System.Web.Mobile」内の資源は使用していないので参照から削除可)、完全修飾名に違いがある(Windowsのアセンブリには「processorArchitecture=MSIL」が付与されているものがある)などの理由から、[参照]の右クリックを行い、[参照アセンブリの編集]から各アセンブリの再設定する必要があります。
また、GACに存在する「System.Web.Mvc」はアセンブリリストに表示されないので(ASP.NET MVC Supportアドインに含まれる「System.Web.Mvc」は選択しない)、暫定的な処置になりますが、「/opt/mono/2.4.2.3/lib/pkgconfig」ディレクトリに「System.Web.Mvc」用の「.pc」ファイル(例:「system.web.mvc_1.0.pc」)を配置することで、アセンブリリストに表示されるようになるので、それを選択するようにします。
Name: System.Web.Mvc Description: System.Web.Mvc ASP.NET MVC Version: 1.0.0.0 Libs: -r:/opt/mono/2.4.2.3/lib/mono/gac/System.Web.Mvc/1.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
MonoDevelopのアドインとして、「ASP.NET MVC Support」および「Database」以下を追加しています。