.NET Frameworkから.NETへの移行前チェックリストの知識マップ(知識グラフ)
.NET Frameworkから.NETへの移行は実装より前の棚卸しが要で、packages.configの後継であるPackageReferenceやSDKスタイルプロジェクトへの変換は移行より先に済ませておくべき作業とされる。AppDomainの新規作成や.NET Remoting、COM+、Workflow Foundationは.NETと両立せず、BinaryFormatterも状況によっては両立しない。WCFはクライアントとサーバーで事情が異なり、サーバー側はCoreWCFかgRPCへの再設計が必要になる。ASP.NET FrameworkはASP.NET Coreの後継だがWeb Formsは同じapp modelではなく、EF6からEF Coreへの移行はruntimeの移行と切り離して後回しにするのが安全とされる。WinForms/WPFは移行できてもWindows専用のままで、Windows専用API依存はWindows互換パックで軽減できる。
.NET Frameworkから.NETへの移行
既存の.NET Framework製アプリケーションを現在の.NETへ移し替える取り組み。実装より前の着手前チェックが重視される。
Frameworkから.NETへの移行
.NET移行
.NET Framework
Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
モダンな.NET
Windows互換パック
.NET Framework専用APIへの依存を.NET移行時に補うため約2万のAPIを提供するパッケージ。技術領域一覧にメッセージング(System.Messaging)は含まれない。
PackageReference
NuGetパッケージの参照をcsprojファイルへ直接記述する現在のパッケージ管理方式。
PackageReference形式
packages.config
NuGetパッケージの参照をXMLファイルへ列挙する旧来のパッケージ管理方式。
packages.config形式
SDKスタイルプロジェクト
Microsoft.NET.Sdkをベースにした簡潔なcsprojの形式で、PackageReferenceやmulti-targetingと相性がよい。
.NET Upgrade Assistant
.NET Frameworkプロジェクトの分析とアップグレードをまとめて行う支援ツール。現在は非推奨とされている。
GitHub Copilotモダン化
.NET Frameworkから.NETへの評価・計画・コード修正・検証までを支援するMicrosoftの現行ツール群。
.NET Standard 2.0
.NET Frameworkと.NETの双方から参照できる共有ライブラリ向けの互換仕様。.NET Frameworkは.NET Standard 2.1をサポートしないため、両対応の橋渡しとして使われる。
AppDomainの作成
実行中のプロセス内に分離された実行環境を作るための.NET Frameworkの仕組み。.NETでは新規作成がサポートされない。
.NET Remoting
.NET Frameworkでプロセス間・マシン間のオブジェクト呼び出しを行うための仕組み。.NETでは非対応。
COM+(System.EnterpriseServices)
COM+のサービスを.NET Frameworkから利用するための名前空間。.NETでは非対応。
Workflow Foundation
.NET Frameworkのワークフロー実行エンジン。.NETでは非対応で、再設計が必要になる。
BinaryFormatter
セキュリティ上の理由から段階的に廃止された.NETのバイナリ直列化機構。.NET 9以降はランタイムから実装が削除され既定では使用できない。
WCFサーバー(WCFサービスのホスト)
WCFサービスをホストする側。.NETにはbuilt-inで含まれず、CoreWCFかgRPCなどへの再設計が必要になる。
WCFサービスホスト
CoreWCF
WCFのサーバー側を.NETに移植するコミュニティ主導プロジェクト。マイクロソフトが公式なサポートポリシーを提供する一方、MSMQ対応パッケージ(CoreWCF.MSMQ)はSystem.Messagingのコミュニティ移植に依存する。
gRPC
HTTP/2ベースの高性能なRPCフレームワーク。WCFサーバーのmodern化先の1つ。
EF Core
modern .NET向けのORM。EF6からのdirect upgrade pathはなく、total rewriteとして移行する。
EF6(Entity Framework 6)
.NET Frameworkの主要なORM。EF Coreへはdirect upgrade pathがなく、total rewriteとして扱われる。
ASP.NET Core
modern .NET上で動くクロスプラットフォームのWebアプリケーションフレームワーク。
ASP.NET Framework(MVC/Web API)
.NET Framework上で動くASP.NETのWebアプリケーションフレームワーク。
ASP.NET Web Forms
画面をPage/UserControl/ViewStateで構成する.NET Frameworkの古いWeb UIモデル。ASP.NET Coreとは同じapp modelではない。
System.Web / HttpContext.Current
ASP.NET Frameworkのリクエスト処理を支える名前空間とAPI。.NETには存在しない。
WPF
XAMLでUIを宣言的に記述する、Windows専用のデスクトップUIフレームワーク。ベクターベースの描画とデータバインディングを特徴とする。
Windows Forms
デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。
Windows専用API依存
レジストリ、WMI、EventLog、System.Drawing.Common、COM、Office Interopなど、Windows専用のAPIに依存しているコード。
レジストリ/WMI/EventLog/System.Drawing.Common/COM/Office Interop依存
WCFクライアント
WCFサービスを呼び出す側。modern .NET向けのサポートされたNuGetパッケージが用意されている。
移行前には、現行の.NET Framework側(4.7.2以降、可能なら4.8.1)を整理しておくことが前提とされる
.NET(Core以降)は.NET Frameworkの後継となるクロスプラットフォームのランタイムである
Windows専用のまま移行する場合、Windows Compatibility Packでレジストリ・WMI・EventLogなどのAPIをmodern .NETから使えるようにする現実路線がある
PackageReferenceはpackages.configの後継となるパッケージ参照形式である
移植前ガイドは、SDKスタイルのプロジェクト形式への変換を.NET移行より先に済ませることを推奨している
移植前ガイドは、参照をPackageReference形式へ寄せることを.NET移行より先に済ませることを推奨している
.NET Upgrade Assistantは公式ドキュメント上すでに非推奨になっており、GitHub Copilotモダン化を使うよう案内されている
現行の公式案内では、評価・計画・コード修正・検証までを含めた支援としてGitHub Copilotモダン化が中心に据えられている
old/new双方から参照する必要がある共有ライブラリでは、.NET Standard 2.0を橋渡しとして使うのが現実解になりやすい
新しいAppDomainを作って隔離するという使い方は.NETではサポートされておらず、別プロセスやAssemblyLoadContextでの再設計が必要になる
.NET Remotingは.NETでは非対応で、IPC・HTTP・gRPC・Task ベースなどへ再設計する必要がある
COM+(System.EnterpriseServices)は.NETでは非対応で、前提の設計を分離・置換する必要がある
Workflow Foundationは.NETでは非対応で、CoreWFなど代替を含め別見積もりで考える必要がある
.NET 9以降ではBinaryFormatterの実装がランタイムに含まれず、呼び出すと常にPlatformNotSupportedExceptionを投げる
WCFサービスをホストする側をmodern化する経路の1つとして、既存クライアント互換を保ったままCoreWCFへ移す方向がある
WCFサービスをホストする側をmodern化するもう1つの経路として、gRPCなどmodernなRPC/HTTPベースへ再設計する方向がある
CoreWCFはWCFサーバー機能をmodern .NET上に実装するが、WCFのすべてではなくサブセットである
EF CoreはEF6の後継ORMだが、total rewriteでありdirect upgrade pathはない
runtimeの移行とORMの移行は別問題として扱い、まずmodern .NETに移ってからEF Coreへ別プロジェクトとして移行するのが安全とされる
ASP.NET CoreはASP.NET Frameworkの後継フレームワークとして位置付けられる
Web FormsのPage/UserControl/ViewStateモデルはASP.NET Coreのapp modelと同じではなく、画面資産をそのまま持っていける前提で考えないほうが安全とされる
System.WebやHttpContext.Currentは.NETには存在せず、shared libraryからは外へ剥がす必要がある
WPFはデザイナーのシリアライズやクリップボード・drag & dropの経路でBinaryFormatterに依存することがある
WinFormsはクリップボード・drag & drop・ResX・デザイナーのシリアライズでBinaryFormatterに依存することがある
WPFはWindows専用のままであり、周辺のWindows専用APIに依存し続けることが多い
WinFormsはWindows専用のままであり、周辺のWindows専用APIに依存し続けることが多い
Windows専用のまま移行するなら、Windows Compatibility Packがレジストリ・WMI・EventLogなど多くのWindows専用APIをmodern .NETから使えるようにする
既存のWCFサービスを呼び出す必要がある場合、modern .NETにはその側向けのサポートされたNuGetパッケージが用意されている
組み込み(built-in)のWCFサービスホストは、もともと.NET Frameworkの通信フレームワークとして提供されていた。CoreWCFやgRPCへ移行すればこの前提から外れ、.NET Frameworkなしでもホストできる
ASP.NET Framework(MVC/Web API)は.NET Framework上で動作するWebアプリケーションフレームワークである