※しばやん氏にASP.NET MVCだけでいいよと指摘頂いたので修正 (2011/05/29) 指摘ありがとうございます。
チャック全開兄者からパスが来たので、試してみます。
Visual Studio 2010でASP.NET MVC3 プロジェクトで開発する場合、本番環境に配置する為のアセンブリを追加したり、Binフォルダに一緒にコピーするように設定したりすごく面倒です。
特にWindows Azure上でASP.NET MVC3なWebアプリを展開する場合、気を付けないとアセンブリ不足で動作しないで凹むとかしょっちゅうです。中にはVisual Studio向けAzureプロジェクトテンプレートにMVC3を追加したり、いろいろされてる方もいらっしゃるようです。
でも面倒くさいですね(
NuGetで入るならまだしも。。
ということで、そのうち正式にWindows Azure SDKがASP.NET MVC3に対応すると思いますが、それまでのつなぎな手法を今日は紹介しておきます。
どうするの?
ASP.NET MVC3なプロジェクトには、依存してるアセンブリを一緒に配布するように設定する「配置可能な依存関係の追加」(英語だと Add Deployable Assemblies)メニューが用意されています。
この機能を使うと一緒に配布したほうがいいアセンブリを調べて追加してBinフォルダにコピーするようになってくれます。
やってみよう
ではASP.NET MVC3なAzureプロジェクトにしてみましょう。
- Visual StudioからCloudプロジェクトテンプレートを使用してAzureプロジェクトを作成(作成時、ASP.NET等ロールを追加せず空のままにします)
- ソリューションにASP.NET MVC3なプロジェクトを追加します。
- ASP.NET MVC3なプロジェクトを右クリックしてコンテキストメニューから「配置可能な依存関係の追加」を選択します。
- 追加する配置可能な依存関係の選択ダイアログが表示されるのでASP.NET MVC
と、Razor構文を含むASP.NET Webページにチェックを付けます。(Razorの場合はASP.NET MVCに含まれるので修正) - 必要なアセンブリがつらつらと追加されます。(修正)
- AzureなプロジェクトのロールにASP.NET MVC3なプロジェクトを追加して適当に設定
- Azureなデプロイパッケージしてデプロイ→動作確認→正しくASP.NET MVC3なアプリが動作します。
なんという手抜き(
というのは置いといて、比較的簡単にWindows Azure上にASP.NET MVC3なアプリケーションを展開することができました。
注意点
(Windows AzureなWebロールだと)あまり関係ないとは思いますが、MVC3でIntranet Applicationにした場合WebMatrix.Data.dll / WebMatrix.WebData.dll がWindows認証な処理を奪っちゃうらしく、カスタムで設定しても上書きされるとかなんとか。
このあたりも参照とのことです。
- Including WebMatrix.Data.dll / WebMatrix.WebData.dll overrides forms loginUrl
- ASP.NET MVC3 and Windows Auth on IIS keeps redirecting to /Account/Login
というわけでIntranetじゃないからたぶん問題にならないと思いますけど、念のため注意ください。
※Razor構文~のチェックを付けないとWebMatrix.~.dllが含まれないので問題ないかもです。(2011.05.29 追記)
あとCloudプロジェクトテンプレート(Azureのプロジェクトテンプレート)以外からWebアプリケーション等を追加すると、Webロールのエントリポイントが無いので何かしら処理したい場合は明示的にエントリポイントを追加しましょう。




もしかして、この辺?
http://takepara.blogspot.com/2011/01/webmatrix_14.html
ちゃんと確認してないのであれですけど。
MVC3でWebMatrix.Data.dll云々はその記事にむっちゃ関係します。何がどうなってるか記載して頂いてるので助かりました。ありがとうございます。