Is upgrading every 3 years really that bad? As far as I know, they typically aren’t removing features or causing disruptive changes in .NET versions.
They did when switching away from .NET Framework, but this was because they had to reimplement many features from scratch to work on other platforms, and certain parts got left behind.
The last few .NET updates have been pretty much effortless updates for us. These are internal web apps and not using really esoteric C# features but that probably describes a reasonably large percentage of enterprise .NET adoption.
The only breaking change for us was how .NET 7 introduced [FromServices] which causes controller methods to use dependency injection for attributeless parameters. Confused me at first since it was a rather subtle update that didn't break anything until runtime.
A shift in those cultural dynamics is that you can ship the current .NET LTS with your app (or even STS if you feel like making that sort of security support SLA with your own clients). You aren't relying on their Windows Update habits (or lack of them) or having to install a big .NET installer that might break their other apps.
They may still get left behind on an older version of your software because they want to be, but their relationship to Windows is no longer the big excuse/reason to skip updating to your latest that it used to be.
You are right that it’s on a 2 year cycle. Though there is support for 3 years, so you could safely put off an upgrade for up to a year if there are breaking changes one release.
When I need to send someone an app, I usually use .NET Framework 4.8 because I know it's already installed on every recent version of Windows. This way all I have to distribute is a single very small exe. No need to package a framework with it.
Similar feat with .NET core usually results in a 70-80MB executable.
They did when switching away from .NET Framework, but this was because they had to reimplement many features from scratch to work on other platforms, and certain parts got left behind.