Also, keep stuff up-to-date, MS will at the same time maintain things forever and drop them mercilessly (look at .NET framework itself; it still runs - so counts as "maintained"; but if you didn't migrate to .NET core/ .NET5 / .NET6, you're in a very bad position for the future. With the announcement of .NET core they made a lot of code obsolete).
The previous two things combined create a somewhat bizarre situation: you want to keep up to date with the latest things MS is up to.... but not TOO up-to-date, because you can get into the "hype that will be killed" train. E.g. .NET core 1 was too early to jump onboard - wasn't clear that it's not going to be an UWP. But by .NET core 3, you'd better pay close attention and be ready to invest whatever it takes to move on to the new tech. Probably around .NET core 2.1 was the moment when one should've confidently said that "MS is serious about this .NET core stuff"? (though the exact timing is of course debateable)
And all the things Microsoft "hypes up them drops after a few years" have low adoption compared to their main offerings anyways. It would be silly of them to continue actively developing things like Silverlight when everyone saw that better options were available.
That said, people don't always realize how many things Microsoft tries (and subsequently abandons, because of course not all of them are going to be a success). That .net core was a success is clear now; but you could've easily believed that UWP will be a success and invested in it (in fact, I know teams who did, with really bad consequences for them). What I say is... just wait a bit. In the early days, not even Microsoft knows what will succeed, and they will "sell" their new initiatives very hard (of course!).
Same as Google. Same as YC :)
Core is cross-platform, whereas Framework is Windows-only.
Also, some APIs were put in before generics were introduced and thus don't have type safety. The main ramification of this is to basically always use things in the System.Collections.Generic namespace over other collections.
Most everything else is awesome. .NET core or .NET 6 is what you want.
https://www.devexpress.com/products/net/controls/winforms/
https://www.syncfusion.com/winforms-ui-controls
https://www.nevron.com/products-open-vision-winforms-ui-cont...
If you are lucky and you are making not-very-complex UIs, you can make a thin wrapper using some of the "newer" frameworks. If you make heavy/classic UI's you will probably have to go for WPF or a Third party framework instead.
Also, expect to write 5-10 times more code than with other popular languages. You may not notice this when you come from Java or C++ because then it is an improvement.
As for the misinformation about writing 5-10 times more code than other popular languages, which languages would that be?
Switching between files when every class is in its own file and you need to touch half a dozen classes for each API endpoint, is more of a factor...
Pardon my formatting I'm on a phone
Namespace foo{ Class class1{} Class class2{} }
And
Partial class foo{ }
You don't need to preface a method with `private` to be so but people still do it, why? My theory is the influx of Java dev influences, same with the "One class per file nonsense".
When working in teams, you really shouldn't put more than one class in one file, except for rare exceptions of very small and inconsequential classes. Otherwise the files get pretty big and the chance of merge conflicts get bigger.
The underlying problem - in my opinion - is that C# encourages you to overcomplicate things and that it is relatively verbose. Of course you can put a class with multiple members and methods in one line. But then it's also unreadable. Readability matters.
All languages with a syntax derived from C have a fundamental readability/verbosity problem, C# is no exception. F# for example doesn't have that baggage and is a lot more concise.
You still need a metric shit ton of classes, so finding any one class gets harder. The chance of merge conflicts increases because of more lines per file.
.NET is open source. You're not dependent on Microsoft at all if you don't want to be. If Microsoft closes shop tomorrow, .NET will live on.
You've got a minimal amount of .NET experience (based on your own assertion 3 months ago) and you're spouting incorrect/false information. You were forced to use .NET, maybe that's why you're so unhappy with it. I've used C#/Java/Go/Python/Typescript/JS in my professional life and I've never felt more productive than when I'm building software with C#/.NET. Is it perfect? Not by a longshot. If I had my way I'd be using F#, but alas it's not popular/well-promoted (that I blame squarely on MS.)
https://news.ycombinator.com/threads?next=29303588&id=bayesi...
You are also beholden to the direction Microsoft wants to take the project/platform. There is nothing the other open source contributors, such as there are, can do about it. Fork? Maybe, but there's not THAT much activity around it anyway.
Again, all of this is a risk or "situation" one may be happy to take. Just be aware of it. At the end, .NET is more code, harder to learn, harder to recruit for, easier to over-complicate, and the ecosystem of libraries is thinner than with Django, Python and Javascript.
.NET is sometimes/often chosen for "performance reasons". In my opinion, for websites or web applications this is completely bogus. ASP.NET will slow your development down so much (compared to Django/Node/PhP/RoR) that you won't see any of those benefits any time soon.