back to Jitbit Blog home About this blog

Reasons NOT to upgrade ASP.NET to ASP.NET Core (but you will have to anyway)

by Alex Yumashev · Updated Apr 22 2021

I know, I know, .NET Core is the future of .NET, and "cross-platform blah-blah", and "high-performance and scalable blah-blah", and also "microservices!!! containers!!!" etc. Even more - I understand that's it's inevitable. But still. Consider this an angry post on what's wrong with upgrading from ASP.NET Framework to ASP.NET Core:

It's not really an upgrade

It's a rewrite. And a tough one. I've lived through many rewrites in my 20-years career in software engineering (Angular -> Vue, Cordova -> Ionic, ASP -> ASP.NET, even PHP -> Python -> node, just to name a few), and this one is the worst, because it gives that false feeling of an "upgrade". Many things will have to be rewritten, and many entirely new things have to be written from scratch because they're just... gone.

No hot-swap update

Minor annoyance, but you can't just overwrite your ASP.NET Core app with new files and expect it to pick 'em up. The files are locked. You have to come up with hacks, like renaming the main dll-file then overwriting, then recycling the app - or point your "website" to a new updated directory... And even then you will have minor downtime.

"But that's not how you do it" - I know, I know, blue-green deployments, Docker and shit... I don't care. What I do care about - are my self-hosted customers who now have a new headache that wasn't there before. Not all of my customers are experienced system administrators.

No recycles

You can't even "recycle" an ASP.NET Core app without losing some requests and throwing 503-errors. There's an active issue at GitHub that stays unfixed for 2 years. I don't mean recycling for deployment purposes - just... recycles. I simply want to be able to restart an app without users getting errors

Not included in Windows Update

.NET Core runtime is not automatically updated in Windows. This adds more work to system administrators who live in the windows world - set up WSUS or use "Microsoft Update" (not really the same as "Windows Update", confused? Me too). And we're back to my point about the self-hosted customers - they have more work to do now.

Over-engineered (subjective)

This one is totally subjective, but as a Microsoft-Certified-you-name-it dare I say .NET Core is over engineered. Too many computer scientists making unnecessary abstractions and wrapping stuff in factories and dependency injections over a simple "Hello World" app. The How to get DB connection string in NET Core" question at StackoverFlow is 15 screens long.

Too frequent changes

Having an issue with .NET Core? Googled up a blog post that describes a solution? Great. Now check the blog post date! If it's from 2-3 years ago - chances are it does not work any more. "Sorry, that's not how it works in version X.0X". This one annoys me the most.

Microsoft doesn't get open source

Microsoft tries its best to suck up to the tech community and be "open-source friendly".

But it seems like Microsoft took everything that's bad about open source, and left out everything that's good about open source. By "bad" I mean lack of documentation (just read the sources ™), versioning hell, breaking changes etc. And by "good" I mean actually encouraging and accepting contributions.

I fixed a bug in SignalR (Microsoft's websocket library) and it took them 21 months to merge the fix and they still haven't released any updates. Yet, it took them only a couple of weeks to make VSCode work on Apple M1 Silicon. That's not "open source friendly", that's PR-driven development.

...but you will still have to

Well, .NET Core is still fast as ef. Even faster than C++ and Go on some tasks. We're in the process of porting our flagship product - Jitbit Helpdesk - from ASP.NET MVC to ASP.NET Core, so I keep benchmarking stuff all the time, and it's real - same code runs 1.5X faster.

And while .NET Framework stays here and even keeps getting updates as part of Windows OS, make no mistake, it's frozen now. I guess we'll have to suck it up and port.