ASP.NET WebサイトまたはASP.NET Webアプリケーション?


Answers

Webサイトは、IISなどのASP.NET Webサーバーに展開するものです。 ファイルとフォルダの束。 Webサイトには、Visual Studio(プロジェクトファイルはありません)と結びついているものは何もありません。 Webページのコード生成とコンパイル(.aspx、.ascx、.masterなど)は実行時動的に行われ、これらのファイルへの変更はフレームワークによって検出され、自動的に再コンパイルされます。 特別なApp_Codeフォルダにページ間で共有したいコードを置くか、あらかじめコンパイルしてアセンブリをBinフォルダに置くことができます。

Webアプリケーションは特別なVisual Studioプロジェクトです。 Webサイトとの主な違いは、プロジェクトをビルドするときに、すべてのコードファイルが単一のアセンブリにコンパイルされ、それがbinディレクトリに置かれることです。 コードファイルをWebサーバーにデプロイしません。 共有コードファイル用の特別なフォルダを用意する代わりに、クラスライブラリのようにどこにでも置くことができます。 Webアプリケーションには、プロジェクトやコードファイルなど、展開する予定のないファイルが含まれているため、指定した場所にWebサイトを出力するためのVisual Studioに公開コマンドがあります。

App_CodeとBin

共有コードファイルの展開は一般的には悪い考えですが、Webアプリケーションを選択する必要はありません。 Webサイトのすべてのコードを保持するクラスライブラリプロジェクトを参照するWebサイトを作成できます。 Webアプリケーションはそれを行う便利な方法です。

コードビハインド

このトピックは、.aspxおよび.ascxファイルに固有です。 このトピックは、コードビハインドファイルを使用しないASP.NET MVCやASP.NET Webページなどの新しいアプリケーションフレームワークでは、関連性が低くなります。

.aspxページおよび.ascxコントロールのコードビヘイビアファイルを含む、すべてのコードファイルを単一のアセンブリにコンパイルすることによって、Webアプリケーションでは小さな変更ごとに再ビルドする必要があり、ライブ変更を加えることはできません。 これは、Webサイトの変更がランタイムによって検出され、ページ/コントロールが自動的に再コンパイルされている間に、変更を確認するために再ビルドを続ける必要があるため、開発中に大きな痛みになる可能性があります。

ランタイムがコードビヘイビアのアセンブリを管理することは、ページ/コントロールに一意の名前を付けたり、別の名前空間にそれらを編成することを心配する必要がないので、あなたにとってはあまり効果がありません。

私は、コードファイルの配布は常に良いアイデア(特に共有コードファイルの場合ではない)だとは言っていませんが、コードビハインドファイルにはUI固有のタスク、ワイヤーアップイベントハンドラーなどを実行するコードしか含まれません。重要なコードが常にBinフォルダに格納されるように階層化されています。 その場合、コードビヘイビアファイルの展開は有害であると見なされるべきではありません。

Webアプリケーションのもう1つの制限は、プロジェクトの言語のみを使用できることです。 Webサイトでは、C#でいくつかのページを、VBなどでいくつかのページを持つことができます。特別なVisual Studioサポートは必要ありません。 それは、ビルドプロバイダの拡張性の美しさです。

また、Webアプリケーションでは、実行時にコンパイルされるマークアップコード(MVCではMvcBuildViewsオプションを使用してこれを修正できます)ではなく、コンパイラがコードビハインドクラスのみをコンパイルするため、ページ/コントロールでエラー検出を取得しません。

Visual Studio

WebアプリケーションはVisual Studioプロジェクトなので、Webサイトでは利用できない機能がいくつかあります。 たとえば、ビルド・イベントを使用して、Javascriptファイルを縮小および/または結合するなど、さまざまなタスクを実行できます。

Visual Studio 2010で導入されたもう1つの優れた機能は、 Web.config変換です。 これはWebサイトでも利用できません。 今すぐVS 2013のWebサイトで動作します。

Webアプリケーションの構築は、特に大規模なサイト向けにWebサイトを構築するよりも高速です。 これは主に、Webアプリケーションがマークアップコードをコンパイルしないためです。 MVCでは、MvcBuildViewsをtrueに設定すると、マークアップコードがコンパイルされ、エラー検出が行われ、非常に便利です。 欠点は、ソリューションをビルドするたびに、完全なサイトを構築することです。サイトを編集していない場合は、時間がかかり、効率が悪くなる可能性があります。 私はMvcBuildViewsのオンとオフを切り替えることができます(プロジェクトのアンロードが必要です)。 一方、Webサイトでは、ソリューションの一部としてサイトを構築するかどうかを選択できます。 そうでない場合は、ソリューションを構築するのが非常に高速です。変更を加えたら、いつでもWebサイトノードをクリックして[ビルド]を選択することができます。

MVC Webアプリケーションプロジェクトでは、 'Add View'、 'Go To View'、 'Add Controller'などの一般的なタスクのための余分なコマンドとダイアログがあります。これらはMVC Webサイトでは利用できません。

IIS Expressを開発サーバーとして使用する場合は、Webサイトで仮想ディレクトリを追加できます。 このオプションはWebアプリケーションでは使用できません。

NuGetパッケージのリストアはWebサイトでは機能しません。packages.configにリストされているパッケージを手動でインストールする必要があります パッケージの復元は、 NuGet 2.7を起動するWebサイトでも動作するようになりました

Question

Visual Studioで新しいASP.NETプロジェクトを開始すると、ASP.NET Webアプリケーションを作成することも、ASP.NET Webサイトを作成することもできます。

ASP.NET WebアプリケーションとASP.NET Webサイトの違いは何ですか? なぜ私は他のものを選ぶだろうか?

回答は、使用しているVisual Studioのバージョンによって異なりますか?




Webアプリケーションプロジェクトでは、Visual Studioにページとユーザーコントロール用の.designerファイルがさらに必要です。 Webサイトプロジェクトではこのオーバーヘッドは必要ありません。 マークアップ自体はデザインとして解釈されます。




Webアプリケーションは、おそらく選択肢がないため、単一のアセンブリにコンパイルするために、より多くのメモリを必要とします。 私はちょうど大きなレガシーサイトをWebアプリケーションに変換し、コンパイル時に

Unexpected error writing metadata to file '' -- 
Not enough storage is available to complete this operation. 

エラーと実行時にこのエラーが発生します。

Exception information: 
    Exception type: HttpException 
    Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

メモリが制約されている従来のハードウェアで大規模なサイトを変換することをお勧めするのは、自分自身がウェブサイトモデルに戻すことができるようにすることです。 最初の成功の後でさえ、問題が後で起こる可能性があります。




間違いなくWebアプリケーション、単一のDLLファイルと簡単に維持する。 しかし、ウェブサイトはより柔軟性があります。 あなたは外出先でaspxファイルを編集することができます。




重要な違いの1つは、Webサイトが動的にコンパイルされ、オンザフライのアセンブリを作成することです。 Webアプリケーションは、1つの大きなアセンブリにコンパイルされます。

この2つの違いは、Visual Studio 2008で取り除かれています。




ウェブサイト - ソリューションファイルは作成されません。 私たちは、Webサイトを作成したい場合は、Visual Studioの必要はありません。

Webアプリケーション - ソリューションファイルが作成されます。 Webアプリケーションを作成したい場合は、ビジュアルスタジオが必要です。 binフォルダー内に単一の.dllファイルが作成されます。




Webアプリケーションプロジェクトモデル

  • Visual Studio .NET Webプロジェクトと同じWebプロジェクトセマンティクスを提供します。 プロジェクトファイル(プロジェクトファイルに基づいた構造)を持っています。 ビルドモデル - プロジェクト内のすべてのコードが単一のアセンブリにコンパイルされます。 IISと組み込みのASP.NET開発サーバーの両方をサポートします。 Visual Studio 2005のすべての機能(リファクタリング、ジェネリックスなど)とASP.NET(マスターページ、メンバーシップ、ログイン、サイトナビゲーション、テーマなど)をサポートします。 FrontPage Server Extensions(FPSE)を使用する必要はなくなりました。

Webサイトプロジェクトモデル

  • プロジェクトファイルがありません(ファイルシステムに基づいています)。
  • 新しいコンパイルモデル。
  • 各ページビューにサイト全体を構築せずに動的コンパイルとページ上での作業。
  • IISと組み込みのASP.NET開発サーバーの両方をサポートします。
  • 各ページには独自のアセンブリがあります。
  • デファレンシャルコードモデル。



これは少しはっきりと聞こえるかもしれませんが、Visual Studio 2005は当初Webサイトにのみ付属していたので、間違っていると思います。 あなたのプロジェクトがかなり限定されており、論理的または物理的な分離がほとんどないウェブサイトを扱う場合、ウェブサイトは問題ありません。 しかし、多くのユーザーがデータを追加したり更新したりするモジュールが異なる本当のWebアプリケーションであれば、Webアプリケーションを使う方がよいでしょう。

Webサイトモデルの最大のapp_codeは、 app_codeセクションのapp_codeが動的にコンパイルされることです。 C#ファイルを完全に再デプロイせずに更新することができます。 しかし、これは大きな犠牲になります。 カバーの下では制御が難しい多くのことが起こります。 名前空間は制御が難しく、すべてが動的にコンパイルされるので、特定のDLLの使用がapp_code下ではデフォルトでウィンドウの外に出ます。

Webアプリケーションモデルには動的コンパイルはありませんが、あなたが言及したことを制御できます。

n層の開発を行っている場合は、Webアプリケーションモデルを強くお勧めします。 限られたWebサイトや迅速で汚れた実装を行っている場合、Webサイトモデルには利点があります。

より詳細な分析は、




「Webサイト」は特別なApp_Codeディレクトリにコードを持ち、実行時にいくつかのDLL(アセンブリ)にコンパイルされます。 「Webアプリケーション」は1つのDLLにプリコンパイルされています。




動的にコンパイルされたプロジェクトが必要な場合を除き、Webサイトプロジェクトを使用しないください

どうして? プロジェクトを変更または理解しようとすると、Webサイトプロジェクトが壁を駆け上がらせるためです。 Visual Studioのスタティックなタイプの検索機能(たとえば、使用法、リファクタの検索)は、すべての合理的なサイズのプロジェクトで永遠に使用されます。 詳細については、Visual Studioの「すべての参照を検索」の「スタックオーバーフローの問題」を参照してください。

Visual Studio 2005のWebアプリケーションを、痛みを誘発し、健全性を損なう、生産性の高いウェブサイトのプロジェクトタイプのためにドロップした理由は、実際には分かりません。




アプリケーションは通常、配備前にコンパイルされます。ここでは、Webサイトでapp_codeディレクトリを使用します。 アプリコードフォルダ内の何かが変更されると、サーバはコードを再コンパイルします。 つまり、Webサイトでコードを追加/変更することができます。

アプリの利点は、再コンパイルがないため、最初の起動時間が短縮されることです。




それはあなたが開発しているものによって異なります。

コンテンツ指向のウェブサイトは頻繁に変化するコンテンツを持ち、ウェブサイトはそれに適しています。

アプリケーションは、そのデータをデータベースに格納し、そのページとコードの変更はめったにありません。 この場合、アセンブリのデプロイメントがはるかに制御され、単体テストのサポートが強化されたWebアプリケーションを使用する方がよいでしょう。




Links