.NET Core, .NET 5; the Exodus of .NET Framework?
blog.marcgravell.com
blog.marcgravell.com
I see this trend accelerating so for once it seems Microsoft has read the tea leaves correctly.
In comparison to say WPF, the web stack was very lacking. It wasn't for example until a few years ago that we got CSS grids. Heck, HTML components are still not mainstream, despite solving a very problem... which doesn't elsewhere.
With the current state of the tech it would be Qt (very awkward for the web though, using WASM?), or a modern web framwework with a design framework (e.g. Angular + Material Design) inside native wrappers. I don't see how MS could step in with some silver bullet solution.
I'm just not sure x-plat desktop is a place where MS needed to step in to fill the void.
https://visualstudiomagazine.com/articles/2019/09/26/blazor-...
Mono supports Windows Forms: https://www.mono-project.com/docs/gui/winforms/
Still rough around the edges, but it's coming together.
Mono's implementation no longer works on newest versions of macOS unless you compile it and a bunch of other stuff yourself.
So no its not really coming together.
Many of Microsoft's own libraries such as Sharepoint and Dynamics don't support Core and many don't even have clear signalled intention to do so.
Classic "big bang flag day, break compatibility" problems.
Can you give any examples?
Generally, .NET Standard aims to fix the problem. If you upgrade to .NET 4.8(or atleast .NET 4.7.2), you can use libraries targetting .NET Standard v2.0(and below)
So, new libraries can support both NET Framework. (Unless the authors don't want to Or can't)
It is not a perfect solution as library maintainers need to put effort into migrating to NET Standard. But if library authors have not done it by now, then perhaps you should use a different library
The effort isn't very difficult in my experience; switch CSPROJ formats, edit the file to be multi-framework, rinse repeat. Your build scripts and/or CI pipeline will probably be where more of the work is.
That said...
>>have one dependency that hasn't been updated to support Core and you can't upgrade and then you can't use anything new.
>Can you give any examples?
WCF.
Sharepoint, Dynamics... ;)
> So, new libraries can support both NET Framework. (Unless the authors don't want to Or can't)
It's possible, yes.
The more "active", smaller, newer libraries are already starting to get sick of this and remove support for Framework. ASP.NET for example.
Further compounding the situation is when libraries take it as an opportunity to make compatibility breaks themselves. Some MS examples include Powershell, ASP.NET and Entity Framework.
In C++, which has a large community with this particular affliction, this usually means their code stops compiling with anything but a HEAD clang targeting C++20 and becomes utterly unrecognizable. In C#, following this post, a few framework gimmicks will apparently not be implemented in the old .NET: all code must utilize them or risk "exodus".
Java had a good immunization protocol: don't change the language for 10 years. All those people moved to Scala.
Meanwhile, of course, the real world continues to run just fine with ancient software written in ancient languages compiled with ancient tooling, targeting ancient operating systems. Your router is on Linux 2.6. Hell, you can start a new application targeting .NET Framework 4 today and Microsoft will keep that stuff running for another 20 years on Windows.
Core 2.0 came out mid 2017, and in my mind I still wasn't sure .NET Core had cooled down enough to port applications from .NET Framework. 2.0 turned out to largely be stable enough for production, but there wasn't really any way of knowing that without watching it for a few years.
We've only just gotten to the point where moving an important production code base to .NET core actually feels like the correct thing to do. I'm sure there will still be some hurdles involved, but at least there won't be too many landmines.
That's not true. Friction in tooling and project description files does not really equate to instability for production use - "worth it" is quite subjective and also not equatable to stable. As you said, Core v2 was already out 2 years ago, and plenty of people were using Core v1.X in production on significant sites without much trouble.
Doesn't matter if the underlying platform is supported if the entire ecosystem moved elsewhere.
I think that because of that longevity, you're going to see lots of the main libraries etc. supporting .NET Framework for years to come.