-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ASPNETTemplateHistory
ASP.NET のプロジェクト・テンプレートの変遷から読む、開発のトレンド。
補足(この切り口の妙): 「プロジェクト テンプレートを見れば、
その時点で Microsoft が何を推していたかが分かる」——
という着眼は的確である。【テンプレートが示すもの】 ・その時点で【既定とされた構成】 ・新規案件が【自然に採用する】もの ・逆に言えば、テンプレートから消えた技術は【推奨されなくなった】本ページは VS2010~VS2017 を追っているが、
その後 VS2019 / VS2022 で更に大きく変わったため、
末尾に続きを補足する。
OWIN も Bundle、Routing、Authentication テンプレートもサポートされていない。
非 OWIN
非 OWIN
- 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 更新)で動かなくなっていることが多い。
- OWIN 化対応がなされた。
- 様々な認証対応テンプレートも追加された。
-
認証対応テンプレート
-
組織アカウントの場合
恐らく WIF を使用して WS-Federation の認証連携を行う。 -
個人アカウントの場合
-
OWIN ミドルウェアである ASP.NET Identity を使用するために
OWIN 化対応がなされている。 -
ASP.NET Identity によって、外部ログインや、OAuthServer 実装も
サポートされ始めた。
-
OWIN ミドルウェアである ASP.NET Identity を使用するために
-
-
上記から以下の変更が加えられた。
-
認証なし、
個人アカウント、組織アカウント、Windows 認証
などの認証テンプレートがサポートされた。 -
個人アカウントの場合
Authentication は以下のモジュールに変更された。- Microsoft.AspNet.Identity.Core
- Microsoft.AspNet.Identity.Owin
- Microsoft.Owin.Security
-
ASP.NET MVC 4 - 5
- 変更内容は ASP.NET Web Forms と同様。
補足(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 における 認証)。
ASP.NET Core がサポートされた。
- 大枠、VS2013 と同じ。
- ASP.NET Web Forms, ASP.NET MVC 5
- ASP.NET 5 & ASP.NET MVC 6
-
ASP.NET Core 用のテンプレートはすべて OWIN。
(と言うより、ASP.NET Core 自体が OWIN 互換レイヤーを実装している)
移行メモ(「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 資産を活かすための橋渡し
下記がサポートされた。
- .NET Core 2.0
- .NET Standard 2.0
- ASP.NET Core 2.0
他にも色々サポートされており、非常に多様化した。
補足(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.cs1 ファイルに ★トップレベル ステートメント 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 / webpack(ASP.NET の BundleConfig) DotNetOpenAuth 標準の OIDC / OAuth ミドルウェア Startup.csProgram.cs(Minimal Hosting)JavaScript Services フロントを別プロジェクトに(JavaScript Services)
Tags: 移行, .NET開発, ASP.NET, ASP.NET MVC, OWIN, NuGet
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。