Skip to content

MS_ASPNETTemplateHistory

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

ASP.NET のプロジェクト・テンプレートの変遷

概要

ASP.NET のプロジェクト・テンプレートの変遷から読む、開発のトレンド。

補足(この切り口の妙): 「プロジェクト テンプレートを見れば、
その時点で Microsoft が何を推していたかが分かる
」——
という着眼は的確である。

【テンプレートが示すもの】
   ・その時点で【既定とされた構成】
   ・新規案件が【自然に採用する】もの
   ・逆に言えば、テンプレートから消えた技術は【推奨されなくなった】

本ページは VS2010~VS2017 を追っているが、
その後 VS2019 / VS2022 で更に大きく変わったため、
末尾に続きを補足する

詳細

VS2010

OWIN も Bundle、Routing、Authentication テンプレートもサポートされていない。

OWIN

OWIN

VS2012

  • OWIN は、まだサポートされていない。
  • Bundle、Routing、Authentication(OAuth) テンプレートがサポートされ始めた。
  • OWIN

  • 以下がサポートされた

    • BundleConfig
    • RouteConfig
    • AuthConfig
  • モジュール

    • Bundle には以下のモジュールが使用されている。

      • System.Web.Optimization
    • Routing には以下のモジュールが使用されている。

      • Microsoft.AspNet.FriendlyUrls
    • Authentication(OAuth) には以下のモジュールが使用されている。

      • DotNetOpenAuth
      • Microsoft.AspNet.Membership
      • System.Web.Security.Membership
  • OWIN

  • Authentication には以下のモジュールが使用されている。

    • OAuth は未サポート
    • System.Web.Security.Membership
  • OWIN

  • 以下がサポートされた

    • BundleConfig
    • AuthConfig
    • ※ MVC では、RouteConfig は前からサポートされていた。
      ( v4 から各 Config クラスが外出しになっただけ。)
  • モジュール

    • Bundle には以下のモジュールが使用されている。

      • System.Web.Optimization
    • Routing には以下のモジュールが使用されている。

      • System.Web.Routing
    • Authentication(OAuth) には以下のモジュールが使用されている。

      • DotNetOpenAuth
      • Microsoft.Web.WebPages.OAuth
      • Webmatrix.Webdata.Websecurity
      • System.Web.Security.Membership

補足(VS2012 期の混乱): この時期の認証まわりは
モジュールが乱立しており、後に整理される

【VS2012 期の認証スタック】
   System.Web.Security.Membership … ASP.NET 2.0 由来のメンバーシップ
   WebMatrix.WebData.WebSecurity  … WebMatrix 由来の簡易版
   Microsoft.Web.WebPages.OAuth   … 外部ログインの薄いラッパー
   DotNetOpenAuth                 … OAuth/OpenID の実装(サードパーティ)

     → 【4 種類が混在】し、どれを使うべきか分かりにくかった
     → VS2013 で ASP.NET Identity に統合される ★

DotNetOpenAuth は現在は開発が止まっている
Microsoft.Web.WebPages.OAuth も同様で、
これらを使った古いコードは、認証プロバイダー側の仕様変更
(Google / Facebook の API 更新)で動かなくなっている
ことが多い。

VS2013

  • OWIN 化対応がなされた。
  • 様々な認証対応テンプレートも追加された。
  • 認証対応テンプレート

    • 組織アカウントの場合
      恐らく WIF を使用して WS-Federation の認証連携を行う。

    • 個人アカウントの場合

      • OWIN ミドルウェアである ASP.NET Identity を使用するために
        OWIN 化対応がなされている。
      • ASP.NET Identity によって、外部ログインや、OAuthServer 実装も
        サポートされ始めた。
  • 上記から以下の変更が加えられた。

    • 認証なし、
      個人アカウント、組織アカウント、Windows 認証
      などの認証テンプレートがサポートされた。

    • 個人アカウントの場合
      Authentication は以下のモジュールに変更された。

      • Microsoft.AspNet.Identity.Core
      • Microsoft.AspNet.Identity.Owin
      • Microsoft.Owin.Security

補足(VS2013 が最大の転換点): 本ページの記述の通り、
VS2013 で OWIN 化が起きたことが、
その後の ASP.NET Core への道を開いた。

【OWIN 化が意味したこと】

 【従来】 ASP.NET は System.Web.dll と IIS に密結合
     HttpContext / HttpApplication / HttpModule / HttpHandler
       → IIS がなければ動かない
       → Windows でしか動かない

 【OWIN】 Web サーバとアプリの間に【薄い契約】を置く
     Func<IDictionary<string,object>, Task>
       → サーバを差し替えられる(IIS / Katana / SelfHost)
       → ミドルウェアを積み重ねる構造 ★

 【結果】 ASP.NET Core は【この発想をそのまま採用】した
     app.UseXxx() というパイプラインの積み方は OWIN 由来

ASP.NET Identity が OWIN ミドルウェアとして作られたことも
象徴的である。
認証をアプリの外側(パイプライン)に置くという設計は、
現在の UseAuthentication() / UseAuthorization() に繋がっている
ASP.NET Core における 認証)。

VS2015

ASP.NET Core がサポートされた。

.NET Framework

移行メモ(「ASP.NET 5 & ASP.NET MVC 6」という名称は改称された): VS2015
当時のプレビューでは「ASP.NET 5」「ASP.NET MVC 6」と
呼ばれていたが、2016 年 1 月に「ASP.NET Core 1.0」「ASP.NET Core MVC 1.0」
へ改称された

【改称の理由】
   「ASP.NET 5」だと、ASP.NET 4.6 の【次の版】に見えるが、
   実際は【互換性のない別物】だった
     → バージョン番号を 1.0 に戻し、"Core" を付けて区別した

   同様に .NET Core も 1.0 から始まった

原文の「ASP.NET Core 自体が OWIN 互換レイヤーを実装している」
という記述は、正確には少し違う

・ASP.NET Core は OWIN の【思想】を採用したが、
  OWIN の仕様そのものを実装したわけではない
    → 独自の IApplicationBuilder / RequestDelegate を持つ

・ただし【OWIN 互換パッケージ】は別途提供された
    Microsoft.AspNetCore.Owin
      → app.UseOwin() で OWIN ミドルウェアを載せられる
      → 既存の Katana 資産を活かすための橋渡し

VS2017

下記がサポートされた。

他にも色々サポートされており、非常に多様化した。

補足(VS2019 / VS2022 の続き): 原文は VS2017 で止まっているため、
その後の変遷を補う。ここに現在のトレンドが最も表れている

VS2019(.NET Core 3.x / .NET 5)

変化 内容
Blazor が登場 C# でクライアント側を書く。Server / WebAssembly の 2 種
gRPC テンプレート サービス間通信の選択肢
Worker Service テンプレート バッチ・常駐処理の標準形
Angular / React テンプレートは残存 ただし SPA との統合は縮小方向
Startup.cs まだ健在(ConfigureServices / Configure

VS2022(.NET 6 / 8 / 9)

変化 内容
Minimal API Startup.cs が消え、Program.cs 1 ファイルに
トップレベル ステートメント Main メソッドの記述が不要に
Startup.cs の廃止 WebApplication.CreateBuilder(args) へ統一
.NET Aspire クラウド ネイティブなアプリ構成(.NET 8~)
Blazor United / SSR Server と WebAssembly をページ単位で混在(.NET 8~)
SPA テンプレートの縮小 Angular / React テンプレートは別リポジトリ・別 CLI へ
ASP.NET Web Forms テンプレート .NET(Core 系)には存在しない
// .NET 6 以降の Program.cs(これが全体)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

テンプレートの変遷から読める、現在のトレンド:

① 【設定より規約、そして設定ファイルの削減】
     Web.config(XML)→ appsettings.json → コードで設定
     Startup.cs → Program.cs(1 ファイル)

② 【フロントとバックの分離】
     Web Forms(完全統合)
       → MVC(分離の萌芽)
       → SPA テンプレート(同一プロジェクトで統合を試みた)
       → 【別プロジェクト・別ツールチェーン】★ 現在
     ([ASP.NET Core SPAテンプレート] の主張と一致)

③ 【認証の標準化と外部化】
     Membership → ASP.NET Identity → OIDC / 外部 IdP(Entra ID 等)

④ 【クロス プラットフォームとコンテナ前提】
     IIS 前提 → Kestrel + リバース プロキシ → コンテナ

⑤ 【起動の軽量化】
     Minimal API、Native AOT、トリミング

テンプレートから消えたもの=推奨されなくなったもの:

消えたもの 現在の代替
ASP.NET Web Forms Blazor(コンポーネント指向で最も近い)
Membership / WebSecurity ASP.NET Core Identity / 外部 IdP
BundleConfig Vite / webpackASP.NET の BundleConfig
DotNetOpenAuth 標準の OIDC / OAuth ミドルウェア
Startup.cs Program.cs(Minimal Hosting)
JavaScript Services フロントを別プロジェクトにJavaScript Services

Tags: 移行, .NET開発, ASP.NET, ASP.NET MVC, OWIN, NuGet

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally