ASP.NET 5 Beta7がリリースされました。
そして注目したいのはここ。
"This release also includes the first public preview of the .NET Execution Environment (DNX) for Mac and Linux based on .NET Core – no Mono required."
ついにLinuxとMacOSXでもMonoじゃなくて .NET Coreで動く、と。
ということで、試してみました。
前提とか環境とか
OSはUbuntu Desktop 15.04。 この前段階として、ASP.NET 5 beta6が動く環境が整っていることが前提です。
LinuxでのASP.NET 5の環境構築はまだまだ罠とか嵌りどころが多く、現時点では公式ドキュメントだけ見ていても構築不可能な感じです。 これから設定される場合は、以下の牛尾さんのポストが大変参考になるとおもいます。
ASP.NET5 クロスプラットフォームでアプリケーションの動作環境を構築する
coreclrをインストール
さっそく、coreclrをインストールしてみましょう。dnvmコマンドで次のようにすればOKです。
dnvm install latest -r coreclr
以下のSSではmono版のbeta7も入っていますが、これは上記の前に素で「dnvm upgdade」を走らせてしまったためですので、気にせなさらず。
最新のサンプルプロジェクトを取ってくる
次に、最新のサンプルプロジェクトを取ってきておきます。 GithubにあるASP.NETのサンプルプロジェクト( https://github.com/aspnet/home )を適当にCloneしてきます。
git clone https://github.com/aspnet/Home.git
Cloneが終わったら、サンプルのMVC Webアプリケーションのディレクトリに降りておきましょう。
cd Home/sample/1.0.0-beta7/HelloMVC
依存パッケージの取得(NG編)
あとはNuGetで依存パッケージを取得しれくればOKのはずです。やってみます
dnu restore
が、結果は失敗。
エラーを見ると、"libcurlが無い"といわれてるようです。CoreCLRではlibcurlが必要な模様。
---------- System.TypeInitializationException: The type initializer for 'System.Net.Http.CurlHandler' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libcurl': The specified module could not be found.(Exception from HRESULT: 0x8007007E) at Interop.libcurl.curl_global_init(Int64 flags) at System.Net.Http.CurlHandler..cctor() --- End of inner exception stack trace --- at System.Net.Http.CurlHandler..ctor() at System.Net.Http.HttpClientHandler..ctor() at System.Net.Http.HttpClient..ctor() at Microsoft.Dnx.Tooling.Restore.NuGet.HttpSource..ctor(String baseUri, String userName, String password, Reports reports) at Microsoft.Dnx.Tooling.PackageFeedCache.CreatePackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports) at Microsoft.Dnx.Tooling.PackageFeedCache.<>c__DisplayClass1_0.<GetPackageFeed>b__0(PackageSource _) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Dnx.Tooling.PackageFeedCache.GetPackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports) at Microsoft.Dnx.Tooling.RestoreCommand.AddRemoteProvidersFromSources(List`1 remoteProviders, List`1 effectiveSources, PackageFeedCache packageFeeds, SummaryContext summary) at Microsoft.Dnx.Tooling.RestoreCommand.<Execute>d__60.MoveNext() ---------- Restore failedThe type initializer for 'System.Net.Http.CurlHandler' threw an exception.
libcurlのインストール
ということで、素直にapt-getでlibcurlを入れてやります。が、普通にapt-get install libcurl-dev とやると、
libcurl-devは以下のパッケージで提供されている仮想パッケージです
といわれました。
どれを入れるのが一番いいのかよくわからなかったのですが、とりあえずリストの一番上にあるlibcurl4-openssl-dev
をインストールすることにしました。
sudo apt-get install libcurl4-openssl-dev
依存パッケージの取得(リトライ編)
ということで、再度dnu restoreを実行。
dnu restore
すると、こんどはパッケージの復元に成功しました
webサーバを実行
あとは実行するだけです。kestrelで動かしてみましょう。 今回から微妙にdnxコマンドが変わってて(…というか、間に「.」が要らなくなっただけですが)、以下で実行できます。
dnx kestrel
落としてきたサンプルプロジェクトのkestrelがポート5004をlistenするようになっているので、ブラウザで以下のアドレスにアクセスしてみます。
http://localhost:5004/
無事、表示されました! (囲みは、dnu restoreした時のメッセージで、ちゃんとCoreCLRで実行されるっぽいことが分かります。)