可能性のある複製:
ASP.NET:WebサイトまたはWebアプリケーション?
Visual Studio 2008を起動して「New Project」->「ASP.NET」を選択した場合に得られるものに明らかに違いがあることに気付きました「New Web Site」ではなく「Web Application」->「ASP.NET Web Site」。たとえば、「プロジェクト」を選択した場合、.dllにコンパイルでき、各ページは* .aspx.designer.csコードビハインドファイルを取得します。
1)これら2つの異なるプロジェクトタイプがあるのはなぜですか?
2)どちらが好きですか?
3)なぜ一方を選択するのですか?
4)* .aspx.designer.csファイルはどうなりますか?
1)「Webサイト」モデルはASP.NET 2.0で導入され、「Webアプリケーション」モデルは元の.NETフレームワークのプロジェクトタイプでした。両方とも異なる用途があります(以下を参照)。
2)コンテキストに依存します。良い例は、ソフトウェア製品を販売している場合、きれいにコンパイルされたコードに自然に役立つため、「Webアプリケーション」プロジェクトを使用することです。
3)上記、個人の好み、メンテナンス特性を参照してください。 「Webサイト」を使用すると、多くのトラブルに巻き込まれる可能性がある興味深いことは、Webサイトの実行中にメモ帳でコードビハインド(通常は* .csまたは* .vb)ファイルに任意の変更を加えることです。
4)designer.csファイルは、自動生成されたコードを保存するために使用されます。 "このコードはツールによって生成されました。"
それらは異なる目的を持っています。
ウェブサイトとは、時間とともに変化する可能性のあるコンテンツ、つまりページ自体が変化するサイトです。実際のプロジェクトファイルはなく、サイトは単純に一連のファイルとして展開されます。
アプリケーションは、コンテンツが単なるアプリケーションであるサイトであり、動的部分は主にデータベースなどの永続ストアにあります。データを入力するためのフォームのセットを表す可能性が高いため、コンテンツを調べる手段となるため、より複雑なロジックを使用します。構成とコンパイルされたdllとして展開されるコードをより厳密に制御するプロジェクトファイルがあります。
答えたばかりなので、2の定義を複製しません。
それでは、なぜ一方を他方の上で使用するのでしょうか?
Webサイトでは、PHPまたはクラシックASPサイトのように扱うことができます。このサイトでは、すぐに有効になるインライン変更を行うことができます。
長所
短所
Webアプリケーションを使用すると、デスクトップアプリケーションと同じように扱うことができます。マシン上でコンパイルされるデプロイ可能なものが1つあります。
長所
明確で構造化された変更管理。 2つの異なるバージョンのコードを誤って混在させることはできません。これは、2人が関与している場合に重要になることがあります。1人はコードを記述し、もう1人はファイルをサーバーに配置する責任があります。
マシンでコンパイルするため、その時点ですべての構文がチェックされます*
短所
展開は、開発マシンからフォルダーをコピーするよりも少し複雑です。ただし、「発行」コマンドを使用すると、Webサーバーにコピーするファイルをコンパイルしてまとめるプロセスが大幅に簡素化されます。
マシン上で変更を行い、コンパイルし、まったく新しいバージョンをWebサーバーに送信する必要があります*
* aspx/htmlファイルは、ビルドオプションでこれを有効にした場合にのみ構文チェックされます。プロジェクトにコンパイルしない限り、サーバー上のこれらのファイルを編集することもできます。
簡単な答えは次のとおりです。
シナリオ#1-ハッカーが分離コードファイルを取得すると、データベースパスワードが公開されます。これらのページは、要求時にコンパイルされます。すべてを事前にコンパイルして大規模なアセンブリにすることができます。そうでない場合は、サーバーにより多くの負荷がかかります。
シナリオ#2-ハッカーがアセンブリを取得すると、それらは難読化されます。難読化されたアセンブリは、ひびが入りにくいです。これらのアセンブリはプリコンパイルされているため、サーバーの負荷が軽減されます。
詳細については:
3)WebApplicationプロジェクトはMSBuildでビルドできます。 Webサイトはそうではありません(多くの調整なし)。 TeamSystemを自動ビルドで使用する場合は、これが最善の方法です。
誰も実際に言及していない最大の違いは、アンナカタが触れたことを除いて、すべてが単一のDLLにコンパイルされるモデルでは、アプリケーションが生成するクラスを完全に制御できることです。あなたはそれらがどこにあるかを知っており、アプリケーションの他のどこからでも常にそれらを参照できます。
シングルページモデルでは、これを行うことはできません。 AppCodeディレクトリに「スタブ」クラスを作成し、ページ内のクラスを継承することで回避する必要がありますが、それでも理想的ではなく、複雑さが増します。
コンテンツに基づいて実行時に多くのユーザーコントロールを動的に読み込む複雑な動的サイトを開発しようとしている場合にのみ、このようなことに対して本当に思い浮かぶでしょう。それから、違いは痛々しいほど明確です-したがって、私たちの開発の多くは、後で同じモデルに戻ることができるまでASP 1.1で停止しました。
ニッチ
両方の経験から言えば、「Webサイト」は、テスト方法、CIサーバー、および特定のページへの「修正プログラム」を定期的に奨励および促進する文化がない場合に使用されます。 「Webアプリケーション」は、適切なソフトウェア方法論に従う事実上の標準であり、ユニットテスト(完全なTDDではない場合)と、「ホットフィックス」が必要になる前にクリーンなコードの記述とバグの発見に重点を置いたCIサーバーがあります。
サイトは、Web開発を行う2003年の元の.NETの方法です。私の経験では、プロジェクト定義がないため再利用できず、モジュラーコーディングに問題があり、TeamSystemの統合とネームスペースに問題があるため、極端に問題があります。ドメインとの1対1のバインドおよび実際の公開の抽象化の欠如により、将来的にメンテナンスの問題が発生します。
古代の「古典的」ASP!開発プロセスが失敗していることを示す大規模なシグナルホットフィックスを実行する能力は、不可能であることよりも優れていますが、決して起動したくないものです。
Webサイトモデルの問題が十分に大きかったため、MSが代わりにWebアプリを提供してくれたと言うかもしれません。個人的には、デモコード以外の用途には使用しません。実際には、それさえしません。
最初はWebアプリケーションプロジェクトがありました(現在のWebサイトプロジェクトと同様に動作しました)。一部のユーザーが要求した内容を反映するように変更しました。しかし、人々は古い機能を元に戻したいので、元のWebアプリケーションプロジェクトのように動作するWebサイトプロジェクトを再導入しました。
私と私の職場は、Webサイトプロジェクトを好む
ウェブサイトのファイルがファイルシステム内のファイルであることが気に入っています(手動で追加する必要はありません)
わからない
両方について私が見つけた2つの記事を次に示します。
http://damieng.com/blog/2008/02/07/web-site-vs-web-application
http://www.dotnetspider.com/resources/1520-Difference-between-web-site-web-application.aspx
注:Webサイトに関する多くの問題は、Web展開プロジェクトで解決されました。
更新:ポイント1を修正し、Webアプリケーションが最初にあった
仕事がoo言語機能(クラス階層、名前空間)を活用する必要がある場合、またはプロジェクト間で共通コードを再利用する必要がある場合(データアクセス、クラスライブラリなど)、Webアプリケーションプロジェクトが唯一の方法です。
ウェブサイトプロジェクト(手がかりは名前にあります)は、ウェブアプリケーションではなく、複雑でない「パンフレットウェア」サイト(ページが静的コンテンツで構成される場合)にのみ本当に良いです=。
違いはほとんどないため、Webサイトモデルを使用することを強くお勧めします。
主な違いは、Webサイトの場合、いくつかのファイルを特定のディレクトリに配置する必要がある(コードファイルは「App_Code」ディレクトリに配置する必要がある)ことです。
展開のためにコードをコンパイルすることが重要であり、単一のDLL(Webサイトの通常の公開を行うときに作成される複数のものとは反対)が必要な場合)このアドオンを入手したい: http://msdn.Microsoft.com/en-us/asp.net/aa336619.aspx