.NET Framework 4.7 または .NET 5 と ASP.NET Core 6 のサンプル集。
このサンプル集は今のところ C# だけだが、他にも手を広げるかも。広げないかも。
リポジトリ: netsphere / dotnet-wpf-examples · GitLab
2023年3月現在, .NET 5 と .NET Core 3.1 はすでにサポート期限が切れている。クライアント側は、3rd party ライブラリや Microsoft のライブラリも、非互換のため .NET 6 で動かないものもある。
.NET Framework v4.7 で様子見も選択肢。ライブラリが上げられれば、パフォーマンス向上を享受できるので、.NET ヴァージョンを上げればよい。ただ、無理しなくてよい。
01_wpf-validation-rules/
02_ListView-DataVirtualization/
03_dotnet-http2-sample/
EFcore + SQLite サンプルや, EF6 サンプル。
サーバ側は ASP.NET 4 よりもそれを再設計した ASP.NET Core のほうがよい. ただ、ヴァージョンごとに非互換な変更が入る。ASP.NET Core 5.0 以降で OpenAPI がデフォルトで有効になっており、まぁまぁ安定してきた。このヴァージョン以降を使うがよい。
21_WebApp_MVC/
実際に小さいサンプルを作ってみると, かなり古臭い感じがするのと、EFcore が微妙で、生産性は Ruby on Rails のほうが大いに高い。パフォーマンスに利点があるので、その天秤か。
GUI については, 商業的に大失敗した黒歴史の UWP を畳むために, Microsoft は、Project Reunion や、名前をどんどん変えて WinUI 3, Windows App SDK を相次いで投入しているが、グチャグチャで大混乱している。 .NET 6 に上げたとしても, GUI は WPF でよく, WinUI3 - Windows App SDK 1.2 (November 2022) は見送りでよい。Visual Studio の XAML デザイナで編集もできない。(どうしろと?)
From Discussion: WinUI 3.0 XAML Designer #5917: 2020年11月の issue #3656と, 2021年9月にこれが立てられたが、2023年3月時点で見込みなし。最後のコメントがこれ;
何年にもわたるコミュニティの要求にもかかわらず、Microsoft がこの機能を提供しなかったことは容認できません。 Microsoft が言っているように,「Visual Studio でサポートしないため、フレームワーク (winui または maui) を使用しないでください。 Avalonia UI と Rider に行け。彼らは両方とも、私たちが提供できない開発者向けの xaml デザイナーを持っています…」
WinUI3 - Windows App SDK は, UWP に投資してしまった開発者のために、デスクトップアプリで作り直すための移植なので、UWP のダメなところもそのまま持ち込んでいる。UWP に手を出していなかった幸運な開発者は、WinUI3 を選ぶ理由はない。
ほしたらどれがまだしもか?
(1) Windows デスクトップ向けであれば、単に WPF でよい。
(2) マルチプラットフォームであれば, Avalonia UI が実用アプリケィション開発実績も多く、好ましい。
.NET MAUI (Xamarin.Forms から改称) も, native デスクトップアプリのライブラリで, Microsoft が作ったものではないので、良さそうに見える。マルチウィンドウ、メニューバー、カメラへのアクセスも対応。XAML (コントロール名はWPF と大きく違う.) で UI を書き、開発中は XAML Live Preview がある。ビジュアルデザイナはない。
.NET は元々 Java 対抗だったが、紆余曲折ののち, .NET Core 1.0 で Linux, macOS にも対応。
Distribution | 状況 |
---|---|
Fedora 37 | 公式リポジトリに .NET 6, .NET 7: dotnet-sdk, aspnetcore-runtime, dotnet-runtime パッケージあり。 |
Debian 11 | dotnet パッケージなし (Microsoft のリポジトリ利用)。mono 6.8 を公式リポジトリが提供。 |
openSUSE Leap 15.5 | dotnet は Microsoft のリポジトリを利用。mono 6.8 が公式リポジトリに含まれる。 |
2023.3現在, FreeBSD 向けは、いくつか有志によるバイナリパッケージがある。
各 OS への展開は、Java に比べて弱い。.NET 実装は, Microsoft の dotnet と Mono (.NET Framework 4.7レベル) がある。前者は Windows, Linux, macOS (x86, x64, Arm64) のみ。Mono は *BSD, PowerPC (AIX), s390x などでも動くらしいが、すでに古い。
例えば Scala は Java Virtual Machine (JVM) 上で動く。その意味は, Scala コンパイラが Scala ソースコードを Java バイトコードに変換し, JVM は Java バイトコードを実行する。VM の仕様がしっかりしていれば、その上で動くプログラミング言語のプロジェクトと、各 OS 上で動く VM の開発が別のサイクルで回せる。
Java は仕様が The Java Language Specification と The Java Virtual Machine Specification に分かれていて、バージョンアップのたびにきっちり更新されている。仕様を見るだけで挙動が完全に分かるかまでは調べていないが、Oracle、こういうところはしっかりしている。
GraalVM など, 代替の実装もある。
対して, .NET のほうは, Common Language Runtime (CLR) が実行環境。CLR は中間コード (Intermediate Language; IL) を動かす。同様に, 例えば IronPython は CLR 上で動く。
仕様は, ECMA-335 Common Language Infrastructure (CLI) として纏められている。が、最新が 2012年の 6th edition. 10年間も仕様に追加がないとか、そんなわけなかろーもん。実際、目立つところでは, C# 8.0 + CLR for .NET Core (CoreCLR) 3.0 [2019年9月] でインタフェイスのデフォルト実装が入っている。
文書化が行われていない。.NET のドキュメントのグチャグチャ振りを見るに、ここに弱さがある。