ホーム > .NET, ASP.NET 備忘録 > WebアプリケーションプロジェクトとWebサイトプロジェクト

WebアプリケーションプロジェクトとWebサイトプロジェクト

ASP.NETでプロジェクトを作成する場合、WebアプリケーションプロジェクトとWebサイトプロジェクトの2種類のプロジェクトを作成することができます。
この2種類のプロジェクトの違いについて説明してみたいと思います。

○歴史的経緯

歴史的経緯

VisualStudio.NET(.NET Framework 1.0)およびVisualStudio.NET 2003(.NET Framework 1.1) においては、Webアプリケーションプロジェクトしかありませんでした。
これがVisualStudio 2005(.NET Framework 2.0)になると、当初はWebサイトプロジェクトしか作成できなくなりました。
Webサイトプロジェクトは、プロジェクトの作成時点ではweb.configさえ作らないというように、ASP.NETの実行に最低限必要なものだけをプロジェクトの内部に作成するようになっており、私はこの変化を喜ばしいものと思っていました。

ただ、この変更(Webアプリケーション→Webサイト)で問題が発生する人たちもいました。
それは、Ver 2.0以前にASP.NETでWebアプリケーションを構築し、そこでユーザコントロール等を利用していた人たちで、そのWebアプリケーションをアップグレードして実行しようとするとうまくユーザコントロールが使えない、といった状況が発生していたのです。
このような問題を解消するためもあり、VisualStudio 2005 SP1でWebアプリケーションプロジェクトが追加されました。

VisualStudio 2008ではスタートページからはWebアプリケーションプロジェクトしか作れませんが、メニューからたどることでWebサイトプロジェクトも作成できるようになっています。

 

○WebアプリケーションプロジェクトとWebサイトプロジェクトの違い

2種類のプロジェクトの違い

この2種類のプロジェクトの何が違うのかみてみましょう。

Webアプリケーションプロジェクトでは、コードビハインドファイル、クラスファイル等のすべてのコードファイルをあらかじめコンパイルし、dllファイルを作成してbinフォルダに配置する必要があります。
Webサイトプロジェクトではすべてのコードファイルは実行時にaspxファイルとともにコンパイルされます。また、クラスファイルはApp_Codeフォルダに配置しなければいけません。

VSでデバッグ実行をしたときの流れで2種類のプロジェクトを比較すると、次の図のような違いがあります。

デバッグ実行時の違い

デバッグ実行を開始すると、まずビルドが行われますが、ここでWebアプリケーションプロジェクトはコードファイルをコンパイルし、binフォルダにdllを配置します。
Webサイトプロジェクトでもビルドが行われますが、ここではコンパイルエラーのチェックが行われているだけです。

次にブラウザが起動され、スタートアップに設定されているページ等が表示されるわけですが、このタイミングでWebアプリケーションプロジェクトではaspxファイルから自動的にソースコードが生成され、それがコンパイルされてプロジェクトの実行が開始されます。
Webサイトプロジェクトでは、aspxファイルからのソースコード自動生成が行われるとともに、ここであらためてすべてのコードがコンパイルされ、プロジェクトの実行が開始されます。

 

○違いが与える影響

2種類のプロジェクトが異なることで、どのような影響があるのが具体例を2つ述べてみます。

影響例1

最初の例はLINQ to SQLクラスを追加した後の動作です。

Webアプリケーションプロジェクトでは、追加したLINQ to SQL クラスはルートの直下に作成されます。
また、LinkDataSourceコントロールを追加した場合、そのコントロールで利用するLINQ to SQL クラスをウィザードで設定することができますが、一度ビルドを実行したあとでないと、このウィザードから作成した直後のLINQ to SQLクラスを指定することができません。

Webサイトプロジェクトでは、追加したLINQ to SQL クラスはApp_Codeフォルダに作成されます。また、特にビルドを実行しなくてもLinkDataSourceコントロールのウィザードから指定することができます。

影響例2

もう一つの例は階層型マスターページを利用する場合です。

Webサイトプロジェクトではマスターページや通常のWebページを追加する時点で、その上位にかぶせるマスターページを設定するかどうかチェックを入れることができ、そこで指定をするだけで階層型のマスターページを利用することができます。

これに対して、Webアプリケーションプロジェクトではトップのマスターページ、階層下マスターページ(Nested Master Page)、コンテンツページ(Web Content From)をそれぞれ指定する必要があり、通常のWebフォームとは別のテンプレートを利用しなければいけません。

このような影響は、コンパイルのタイミングだけでなく、WebアプリケーションプロジェクトとWebサイトプロジェクトでプログラム内から外部のクラスを呼び出す方法が異なることからも発生します。

 

○どちらのプロジェクトを利用するか?

プロジェクトを一から構築する場合であれば、WebアプリケーションプロジェクトとWebサイトプロジェクトのどちらを利用しても特に大きな違いはありません。
以前に作成したプロジェクトをアップデートしたい、とか、すでに作成ずみのクラスやユーザコントロールを利用したい、といったときにどちらのプロジェクトであれば構築しやすいかを気にすればよいと思います。

カテゴリー:.NET, ASP.NET 備忘録
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す