そもそも共有プロジェクトって何ぞや?
普通なら、共有プロジェクトって何ぞ?
ってところから始まると思うんですが。
まあ、それはもう前提条件として。
もうすっ飛ばしてしまいます。
ソースファイルが増減しなければリンクでもよし
同じようなことは、「既存の項目」でファイルを追加する際に、「リンクとして追加」を選べばできます。
ソースファイルの増減がなければ、それでもいいかもしれません。
普通なら、共有プロジェクトって何ぞ?
ってところから始まると思うんですが。
まあ、それはもう前提条件として。
もうすっ飛ばしてしまいます。
同じようなことは、「既存の項目」でファイルを追加する際に、「リンクとして追加」を選べばできます。
ソースファイルの増減がなければ、それでもいいかもしれません。
いいですよね。
Surface。
テスト機用にSurface2は仕事場にあって、その速さは実感済みなんですけど。
Surface Pro欲しいですよ。
個人的に。
SignalRを使おうとしてみたのですが、何やらOWINに移行済みとか。
んで、OWINって何ぞや?とかやってみたんですが、まあ資料の少ないことw
しばやんさんのページにはホント助けられました。
そのほかにも、いろんなところでも。
それで、OWIN調べると、いろいろ嵌る嵌る。
日本語の資料が少ないのもあるんですが。
折角なので、忘備録的に書いておこうと思いまして。
ざっと手順としては、以下になります。
それぞれはホントにちょこちょこっと入力するだけなので、理解してしまえばHello Worldをデプロイするまで30分くらいです。
ここで試した環境は、Windows8 + Visual Studio 2013です。
まあ、Visual Studio 2013 Web版でも大丈夫っぽいです。
まずは普通にCloudのプロジェクトを作ってWebRoleを追加しておきます。
その際、WebRoleはEmptyで作っておきます。
また、参照でMVCにチェックを入れておくと、後々Razorのビューを作るときにIntelisenceが効きます。
以下の3つのパッケージをインストールします。
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Nancy.Owin
Install-Package Nancy.Viewengines.Razor
以下の真ん中の行を追加しておきます。
<appSettings>
<add key="owin:HandleAllRequests" value="true"/>
</appSettings>
また、以下の行が2重化しているので1つ削除しておきます。
<add key="webPages:Enabled" value="false" />
パッケージをインストールすると、「追加」→「新しい項目」の一覧の中に「OWIN Startupクラス」というのが増えています。
これを使ってStartupクラスを作成します。
Nancyでルーティングテーブルを作成するためにモジュールを作成します。
これは、MVCのControllerと同じようなもので、命名規則も似通っています。
クラス名はxxxModuleとして、xxxの部分を好きな名前に変えてください。
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = _ =>
{
ViewBag.Title = "Razor Page";
return View["index"];
};
}
}
View[]の中がRazorのビューのファイル名になります。
また、MVCで使うときとと同じようにViewBagが使えます。
プロジェクトを作るときにMVCにチェックを入れておくと、基本的なディレクトリが作成されています。
RazorのビューはMVCで使うのと同じようにViewsディレクトリに作ります。
Nancyのモジュールを作った際につけたクラス名xxxModuleのxxxの部分がViewsディレクトリの下に、そしてその下に拡張子.cshtmlを補う形でビューのファイルを作成します。
ビューのファイルは以下のようになります。
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
@{ Layout = "Shared/_Layout.cshtml";
}
<h3>Hello, world</h3>
基本的にはMVCの時と変わらないのですが、1行目にクラス情報を書きます。
細かく言うと、ビューファイルはC#のファイルを生成し、それをコンパイルすることで動きます。
1行目はその基底クラスの宣言になるようです。
(正確には@inheritsの行)
また、<>の中はNancyのモジュールでView[]を使用した際に2番目の引数の型になります。
この辺は気が向いたらまた書くかもしれません。
Layoutを使う際には、Viewsの下からのディレクトリ・ファイル名を書きます。
ここはMVC5のRazor用にビューを作ると、”~/Views/Shared/_Layout.cshtml”の様にパスが書かれてあります。
このままではNullPointerExceptionが出ますので気を付けてください。
以上でF5とか押してデバッグをするとHello, Worldが出ます。
このままAzureにデプロイすると、エラーになります。
それは、参照ファイルが足りないから。
「参照の追加」から、「アセンブリ」「拡張」ときて、Microsoft.Web.Infrastructureを追加して、「プロパティ」からローカルコピーをTrueに変えておいてください。
本当はSignalRをやってみたいんですが、調べていくうちになんとなくこんな方向に行ってしまいました。
実はその前に
的な葛藤が。
次はNancyで行くかWebApiにするかで悩みそう。