[Microsoft] Windowsデスクトップ向け業務アプリ開発は.NETと.NET Frameworkどっち?
Windowsデスクトップ向け業務アプリ開発には何を採用すべきか? を書いていた時点ではわからなかったことがだいぶはっきりしましたので、あらためてまとめてみます。
以下、Windows 10のバージョン記載は慣例に習って西暦下2桁 + 03 または 09 としています(2004のようにイレギュラーもあるかも)。
.NET(.NET Core)の現況
いつからいつまで使える?
.NET Core Support Policyから引用します。
名前 | バージョン | LTS | リリース日 | サポート終了日 |
---|---|---|---|---|
.NET Core | 3.1 | LTS | 2019/12/3 | 2022/12/3 |
.NET | 5.0 | 2020/11 | 2022/2 | |
.NET | 6.0 | LTS | 2021/11 | 2024/11 |
.NET | 7.0 | 2022/11 | 2024/2 | |
.NET | 8.0 | LTS | 2023/11 | 2026/11 |
LTS(Long Term Support)版はリリースから3年間サポートされます。
Visual Studioにおけるサポートは?
Visual Studio 2019 16.3から.NET Core 3.0がサポートされました。
WPFの場合
WPF XAMLデザイナーは、Visual Studio 2019 16.3から使用できます。プレビューではありません。
Windows Formsの場合
Updates on .NET Core Windows Forms designerによりますと、ビジュアルデザイナーはVisual Studio 2019 16.6においてプレビュー段階です。まだいくつかのコントロールしかサポートしておらず、またサードパーティのコントロールもサポートしていません。
全機能のサポートは.NET 5.0の頃になるようです。
.NET Frameworkで作って、コピーすればOKという話もありました。
.NET Frameworkでいつまで頑張れるか
.NET Frameworkの系譜は終わり、.NET Coreベースの.NET 5になりますが、.NET FrameworkはバンドルされているOSに準じてサポートされ続けます。
Windows 10のサポート期間とバンドルされている.NET FrameworkのバージョンをWindows ライフサイクルのファクト シートと.NET Framework versions and dependenciesから引用します。
2004以降は未リリースです。
Windows 10 バージョン | Pro.エディションサポート終了日 | Enterpriseエディションサポート終了日 | バンドル.NET Framework バージョン |
---|---|---|---|
2203 | 2023/12 (?) | 2023/12 (?) | 4.8 (?) |
2109 | 2023/5 (?) | 2024/5 (?) | 4.8 (?) |
2103 | 2022/12 (?) | 2022/12 (?) | 4.8 (?) |
2009 | 2022/5 (?) | 2023/5 (?) | 4.8 (?) |
2004 | 2021/12 (?) | 2021/12 (?) | 4.8 |
1909 | 2021/5/11 | 2022/5/10 | 4.8 |
1903 | 2020/12/8 | 2020/12/8 | 4.8 |
1809 | 2020/5/12 | 2021/5/11 | 4.7.2 |
1803 | (終了) | 2020/11/10 | 4.7.2 / 3.5 SP1 |
3.5 SP1は、バージョン1809以降からOSコンポーネントとはみなされなくなりました。
4.8も、いつかWindows 10から切り離されるのか?
もし切り離されるとすればいつ頃か?
というのが気になるところです。
.NET Framework Support Policy には、下記のように書いてあるので、切り離されることはなさそうな気もします。
.NET Framework 4.8 is the latest version of .NET Framework and will continue to be distributed with future releases of Windows.
個人的には、.NET 6.0 がGAになってから5〜8年後の2026年か2029年あたりで切り離されるんじゃないかと妄想しています。
3.5 SP1使えばよくね?
3.5 SP1のサポート期間はとても長いので、これで作っておけば安心な気もします。しかしながらメインストリームサポートは2023/10/10までなので、最後にインストールできるWindows 10はバージョン2303になると思われます。したがって、3.5 SP1は実質2024年12月までではないでしょうか?
Windows 10バージョン | リリース時期 | サポート終了時期 |
---|---|---|
2309 | 2023/11 (?) | 2025/5 (?) |
2303 | 2023/5 (?) | 2024/12 (?) |
.NETと.NET Frameworkの比較
.NET Frameworkにあって.NETにない機能(WCFとか)は置いておいて、開発・運用にフォーカスして比較表めいたものを作ってみます。
比較項目 | .NET 3.1 | .NET 5.0〜 | .NET Framework 4.8 | 備考 |
---|---|---|---|---|
Visual StudioにおけるWPFのサポート | ◯ | ◯ | ◯ | |
Visual StudioにおけるWinFormsのサポート | ×寄りの△ | ◯ (?) | ◯ | WinFormsはVSと一体のため、なかなかに難しいらしいです。1 |
C# バージョン | 8.0〜 | ← | 7.3 | |
Visual Basicのサポート | × (?)2 | ◯ | ◯ | .NETでもVB使えますが、もうやめたほうがよいです。3 |
ビルドツール | dotnetコマンド / msbuild | ← | msbuild | |
テストの書きやすさ | ぼちぼち◯ | ← | △ | .NETはSealedが外されて、モックを作りやすくなりました。 |
ソースコード | オープン | ← | プロプライエタリ | ソースを見れば万事解決(つらみ |
インストーラ | MSIX | ← | ClickOnce | |
ランタイム | インストーラとセット | ← | 別途インストール | |
乗り換え頻度 | 24〜36ヶ月毎に、次のLTS版.NETへ乗り換える | ← | 18 or 30ヶ月毎に、新しいWindows 10へ乗り換える |
結論
前提条件によって変わってくると思われます。
- Visual Basicで作成したい
- .NET Framework 4.8 が無難です。
- Windows Formsで作成したい
- .NET Framework 4.8 を選ぶしかないです。
- ガワだけ.NET Framework 4.8で作り、ビジネスロジックは.NET StandardなDLLというのもありかもしれません。
- 上記以外の場合
-
UWPコントロールを使いたい
- .NET
- 運用を予定している環境に入っている.NET Frameworkが古い(そんなことありえるかな?)
- .NET
- 最新のC#を使いたい
- .NET
- 使いたいサードパーティライブラリが.NETに対応していない
- .NET Framework 4.8
- 対応をうたっていなくても、内容によっては.NETから使える場合があります。
- .NET
- NuGetの使用を禁止されている
- .NET Framework 4.8
- Microsoft製品は3世代目からが本番だよね?
- .NET 8.0待ち
-
UWPコントロールを使いたい
主観混じりの結論です。
リンク
- WPFのgitレポジトリ https://github.com/dotnet/wpf
- WinFormsのgitレポジトリ https://github.com/dotnet/winforms
Windows 10と.NET/.NET Frameworkサポート期間一覧
あらためてサポート期間をひとつの図にまとめてみました。
アプリケーションのアップデートや動作検証費用をいつごろ予算化すればよいか、あらかじめ先々のことを話しておくと後々スムーズです。
-
https://devblogs.microsoft.com/dotnet/introducing-net-core-windows-forms-designer-preview-1/#comment-3396 ↩
-
https://devblogs.microsoft.com/dotnet/introducing-net-core-windows-forms-designer-preview-1/#comment-3345 ↩
-
Visual Basicは、言語としては進化させないことが発表されました。言語に対する変更が必要な.NETの機能が登場したとしても、Visual Basicではサポートされません。 ↩