Skip to content

MS_ASPNETSiteVsApp

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

ASP.NETの構成(Webサイト・Webアプリ)

概要

ASP.NET アプリケーションの種類と構成について纏めている。

補足(前提:現在は区別が無い): 本ページが扱う
「Web サイト プロジェクト」と「Web アプリケーション プロジェクト」の選択は、
.NET Framework 版 ASP.NET 固有の話題である。

ASP.NET Core には Web サイト プロジェクトが存在しない
(すべて SDK スタイルの .csproj を持つプロジェクトで、
コードは常にビルド時にコンパイルされる)。

本ページは、既存資産の保守と、移行時の判断材料として読むのが妥当である。

詳細

ASP.NET アプリケーションの種類について

質問

ASP.NET アプリケーションを作成する際に、下記2つからの
選択があると思いますが、選択する上での条件等ありますか?

  1. ASP.NET Web サイト
  2. ASP.NET Web アプリケーション

1 は、コードファイル含めてサーバに配置し、実行時にコンパイルされ
2 は、コンパイルした実行モジュールをサーバに配置される

という認識ですが、選択する上でのメリット、デメリット等の情報を教えて下さい。

※ 参考:Webアプリケーション、Webサイト

補足(違いの整理): 質問者の認識は正しい。表にすると次の通り。

Web サイト プロジェクト Web アプリケーション プロジェクト
プロジェクト ファイル 無し(フォルダがそのままプロジェクト) .csproj / .vbproj あり
コードのコンパイル 実行時(動的コンパイル) ビルド時
出力 無し(ソースを配置) bin\ に DLL 1 つ
名前空間 既定で付かない 既定で付く
designer.cs 生成されない 生成される
ビルド対象の指定 フォルダ内すべて .csproj に列挙されたもの
プリコンパイル aspnet_compiler.exe で任意に 常にコンパイル済み
初回応答 遅い(動的コンパイル) 速い

**「フォルダに置いたものが即プロジェクトの一部になる」**という
Web サイト プロジェクトの性質は、
手軽な反面、構成管理の統制が効きにくいという裏返しを持つ。

回答

  • マストな機能要件・非機能要件と言うより、開発時の利便性によって左右されます。

    • Web アプリケーション プロジェクトでは、
      designer.cs(.vb) が生成されるので、こちらを何らかの目的で
      使いたいと言う開発者目線の要求はあるかもしれません。

    • Web サイト プロジェクトでは、
      アセンブリの参照設定の代わりに、Bin フォルダにアセンブリを放り込む運用ができるので、
      ライブラリに対してレイトバインドする場合等は、こちらの方が使い易いという側面があります。

    • IIS 上で F5 デバッグする場合は、Web サイト プロジェクトである必要があります。

      • Web アプリケーション プロジェクトは、
        開発用 Web サーバ(IIS Express)上でのみ F5 デバッグ可能。
      • Web サイト プロジェクトは、IIS 上でも
        開発用 Web サーバ(IIS Express)上でも F5 デバッグが可能。
      • 別途、IIS のワーカプロセスにアタッチしてデバッグすることは可能。
        参考:デプロイされた ASP.NET アプリケーションのデバッグ - Visual Studio
        https://learn.microsoft.com/ja-jp/visualstudio/debugger/debugging-deployed-web-applications
  • なお、シナリオによっては、Web アプリケーション プロジェクトしか選択できません。

(確かに、Web Deploy パッケージや Microsoft Azure の PaaS など、
一式をパッケージングするものは、Web アプリケーションである必要がある。)

For new development, we recommend that you choose web application projects.
→ 新規開発では Web アプリケーション プロジェクトを選択することを推奨する。

For example, the next Visual Studio release after Visual Studio 2012 will have new tooling
for creating web projects, and this new tooling will work only with web application projects.
→ Visual Studio 2012 以降、Web プロジェクト開発のための新しいツールが出ているが、
それらは Web アプリケーション プロジェクトでのみ使用できる。

補足(現在の結論): Microsoft の推奨(Web アプリケーション)は
その後も変わらず、Web サイト プロジェクトは事実上終息した。

Visual Studio 2012  … Web アプリケーションを推奨(原文が引用)
Visual Studio 2019  … 新規テンプレートから Web サイトが目立たなくなる
Visual Studio 2022  … .NET Framework の Web サイトは「その他」扱い
ASP.NET Core        … 概念自体が存在しない

選ぶ理由が残るのは、原文が挙げる 2 点のみである。

理由 現在の代替
bin に DLL を放り込むレイトバインド プラグイン機構AssemblyLoadContext)、DI
IIS 上での F5 デバッグ IIS へのアタッチASP.NET Coreのデプロイ)、\
または IIS Express / Kestrel で十分

どちらも代替手段があるため、
新規で Web サイト プロジェクトを選ぶ理由は無い

ソリューション、プロジェクトの構成について

質問

複数のサブシステムが存在する場合、
ソリューション、プロジェクトの構成としては、
どのようなパターンが考えられますでしょうか。

(例)サブシステムごとに1ソリューション、1プロジェクト
or 基幹システムとして1ソリューション、サブシステムごとに1プロジェクト等。

回答

選定基準については、こちらを確認下さい。

こちらの選定は、Web サイト、Web アプリケーションの選定と比べると、

  • 開発時の利便性と言う観点よりも、
  • データ共有の範囲やデプロイなど、
    マストな顧客要件に関連する所が多くあります。

なお、上記の資料については、
当時 VS2005 の SP1 のリリース前では、

  • Web アプリケーション プロジェクト

が存在しなかったので、

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

の違いを考慮していません。

補足(この観点は現在も有効): 「プロジェクト種別の選択は
開発時の利便性、ソリューション構成の選択は顧客要件」という
原文の切り分けは、現在も通用する整理である。

ソリューション分割の判断軸は、VSソリューション プロジェクトの構成検討 の通り、

内容
デプロイの単位 一緒に配置するか、別々に配置するか
データ共有の範囲 セッション、DB、キャッシュを共有するか
ビルド時間 巨大な 1 ソリューションはビルドが遅い
チーム分割 誰がどこを触るか

という点にある。
近年はここに 「サービス境界をどう引くか」(モジュラー モノリス /
マイクロサービス)という観点が加わっており、
1 ソリューション内でプロジェクトを分けるか、
リポジトリごと分けるか
という判断に発展している。

Web サイトから Web アプリケーションへの変換

なお、以下の手順で、Web サイト プロジェクトから
Web アプリケーション プロジェクトへの変換が可能。

補足(変換は移行の第一歩になる): この変換は、
ASP.NET Coreへの移行 を見据えた場合の
最初の一手
として意味を持つ。

Web サイト プロジェクト
   ↓ ① Web アプリケーション プロジェクトへ変換(本節)
Web アプリケーション プロジェクト(旧形式 .csproj)
   ↓ ② PackageReference へ移行([NuGet を使用したパッケージ管理](MS_NuGetPackageManagement))
   ↓ ③ [OWIN 化](MS_ASPNETModernization)
ASP.NET(近代化済み)
   ↓ ④ SDK スタイル .csproj へ
ASP.NET Core

① を飛ばして ASP.NET Core へは行けない
(移行アシスタント等のツールも .csproj を前提とする)ため、
移行計画を立てる場合は最初に済ませておくのが定石である。

変換時の主な作業:

  • 名前空間が付くため、Inherits 属性の修正が必要
  • App_Code フォルダは通常のフォルダに変更
  • designer.cs の生成(VS の「デザイナー ファイルへの変換」)
  • bin に直接置いていた DLL を参照設定に変更

参考


Tags: 移行, .NET開発, ASP.NET, ASP.NET Web Forms

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally