I’m in the process of porting a bunch of go code to dotnet core 2.1 on AWS lambda. I’m on a Mac using vscode. I never installed mono, just the dotnet sdk.<p>Honestly, I’ve been amazed at how good the tools have been. For cli and serverless dev, it’s been surprisingly great. It’s fast. C# is decent. The cold starts are not as fast as go, but not terrible. Memory usage is low.<p>It’s been a legitimately positive experience. When I started the port I was skeptical, but it is legit cross-platform. I would consider starting a project in it for lambda... I never thought I’d say that about a MS product.<p>Something over there is different, and I suppose it has been for awhile. I think it could get a lot more popular as non-ms devs realize that MS has built dotnet to work really well on Mac/Linux cli, far away from the weird tightly-coupled Windows/VisualStudio-hit-f5-to-do-the-magic-with-the-15-billion-auto-generated-magical-xml-files world. It feels well engineered instead of thrown together, which is nice.<p>Also, So far, I’ve pulled in no external libs other than the AWS sdk for the port either. C# with linq is a pretty complete toolset. I’m sure I’ll pull in more as I get more familiar, but it’s been solid on its own. Really nice surprise.
I want to like .Net Core, I really do. But in my opinion its just not yet ready for serious use.<p>An example. If you want to use .Net Core you can't use entity framework, you have to use EF Core, which doesn't yet support mapping to views or stored procs, only tables.<p>Now you might think that's fine, maybe you only want to map to tables. But it's the same story all over the ecosystem. Many major projects have a separate netfx and core package, and many times the core package has restricted functionality. You will almost certainly find a whole host of things you need are missing.<p>And then you get the fact that ASP.Net Core is dropping support for .Netfx in the next release, so if you want to use ASP.net Core you are now limited to EF core too, which means you are making a full jump and can't just go halfway first. And .netfx is now not going to support .net standard 2.1.<p>The list of incompatibilities and restrictions just goes on and on. I certainly can't keep the full list in my head. So right now I'm not really willing to commit to a new project of any significance on .net core because I know there will be dozens of missing dependencies or features.<p>You could argue this is just want it's like at the cutting edge, and the gaps will be filled in time. But .netfx is clearly already going into maintenance mode, so the push to move to .net core has already started.
.NET Core and F# are the only reasons why I still develop .NET. I really hope the platform can break out of the Microsoft silo and attract talent from other dev communities, because the biggest problem with .NET Core, despite the whole OSS move, is still that the majority of C# developers let themselves happily trap by the Microsoft marketing machinery. The average .NET developer never even tries different things like AWS or the Google Cloud, TravisCI or AppVeyor, etc. They just swallow anything which so-called MVPs and conference presenters force them down the throat, primarily Azure which is by all measures inferior to the other two and they don't even know.<p>Visual Studio is littered with SQL server and Azure tools which doesn't even make sense. Either offer equal tools for all major tech or none, but this subconscious constant selling of their own tools sickens me slowly.
The post only mentions .NET Core, but should actually be mostly talking about ASP.NET Core that runs on top of .NET Core. The features such as dependency injection and Razor Pages are ASP.NET Core specific.<p>Microsoft have announced that they will be porting WinForms and WPF over to .NET Core so that they no longer need the heavyweight .NET Framework. However, this DOES NOT make WinForms/WPF cross-platform. They will still be restricted to Windows but will allow you the benefits of .NET Core, such as allowing side-by-side versioning.
One thing that makes .NET Core makes me special for me is PowerShell Core.<p>I have been coding quite a bit of PowerShell Cmdlet in C# lately, on Windows and Linux, and it's very nice that I can pass around .NET datatypes interactively, and in a script.
I just inherited a .Net core app that was a proof of concept. It's a real pot luck of glued together functionality. I remember working in MS ASP land almost 2 decades ago and I swore I wouldn't invest a single minute learning another proprietary MS technology.<p>I by and large held to that but here I sit, banging away at some C# code. This is day 3. Did you know if you specify a path in JSON and apply it to Use app.UseStaticFiles with a single trailing slash, instead of a double, it'll bring down the .Net kernel in flames.<p>Not confidence inspiring in the least.
Besides Node.js the main competitor is is Java/JVM. C# is a bit nicer than Java, but you can use Kotlin or Scala on the JVM. All in all I see no real advantage over the JVM/Java world - more of the other way around, since the .Net ecoystem is not as big as the JVM ecosystem. However competition is always good.
On an entirely superficial point, in case the author is reading:<p>> It offers developers modern tooling that can scaffold projects, build, run, test and deploy using incredibly easy-to-use CLI tools.<p>I think this is one place where the abbreviation CLI should be avoided, since it means two completely different things both of which are somewhat plausible here at first glance. "Command line interface" -- even though this is a Microsoft-derived thing, you can do everything using the command-line tools you're used to from Unix, node.js, etc.; "Common Language Infrastructure" -- even though this is happening on Mac and Linux as well as Windows, you can do everything using the Microsoft .NET tools you're used to from Windows. I'm pretty sure the first of these is the intended meaning, but I had to think about it.
Personally the biggest advantage .NET core has for my situation is that it creates a pool of programming talent and mindshare that I'd now be open to hiring and working with on projects that can now be made with open source tools in a sane environment.<p>I don't think it would be my go to choice for projects currently, but its an option I would happily consider and I give Microsoft a lot of credit for moving in this direction.<p>That being said so far the reasons I've had to look at it were modernizing older .NET projects and last I looked there were so many incompatibilities be between .NET core and .NET standard that the projects would have been almost complete re-writes, somewhat of nullifying its advantages against other choices, but that was a while ago.
this seems odd. The main advantage other than going faster than Node ( which you'd expect ) is that it's cross platform and can run in containers and has libraries.....like MOST other languages.<p>Not knocking .NET Core, I use it a lot... but this just doesn't seem like it tells you what's special about it
We are replacing out homegrown PHP ERP system with ASP.NET Core MVC since Version 1.0.<p>It is a blast to work with LINQ and Lambdas and I really miss it in other languages. EF Core also matures quickly and we sucesssfully connected it to mysql and sql server.
So far there hasn't been a problem we couldn't solve in .Net Core.<p>For a small side project I used .Net Core Razor Pages very productively. Only needed the SDK and visual studio code. Planning on moving more small stuff away from python to .net core based on that.<p>Really looking forward to Version 3.0 and Kestrel replacing IIS for good.
If you intend to learn ASP.NET Core, check out my micro samples <a href="https://github.com/dodyg/practical-aspnetcore" rel="nofollow">https://github.com/dodyg/practical-aspnetcore</a> (171 samples so far).
.NET Core is special because it increases the portability of your .NET code in case your cloud provider decides to jack up costs by 15% for no reason other than you are locked in. <i>cough</i> <i>cough</i>
What about client-side apps? Is it possible to write a cross platform client app with .NET Core, a la Electron way? That would be my dream framework. I've been waiting for it for decades, seriously.<p>(I looked at Avalonia UI and mono/xwt. Not sure how stable/reliable they are.)
When I try to run a random .Net exe file with dotnet core it will complain about libhostpolicy.so dependency missing.<p>I understand that it is not supposed to run .exe files (no idea why, okay), but overall it sounds like awful usability.
I would say not being actually free and open source is a show stopper but I'm glad there's finally some progress.
<a href="https://github.com/dotnet/source-build/issues/782" rel="nofollow">https://github.com/dotnet/source-build/issues/782</a><p>I don't get it. They rewrite the whole think from scratch and there's still code they can't show the source for... I have a feeling there is still push back inside Microsoft against Scott Guttrie and the open everything crowd.
Many of the features (Dependency injection, etc) seem only to be available for ASP.Net Core. What about cross platform desktop applications? Do we have a GUI layer that is cross platform as well?
I was working for a company that was making the switch from Nodejs to C#/.NET Core.<p>Having taught and worked 4 years professionally with Java I believed I'd make the switch to C# easily.<p>This was not the case. But not by lack of understanding C# or .NET Core.<p>Mainly .NET Core and C# felt like a few years back in time. A lot of boilerplate, configuration, and a lack of libraries/alternatives.<p>I don't necessarily need or want a full-bodied UoW ORM when designing a microservice. It felt like I was trying to practice DDD designed for a monolith; while many of the programmer practices of DDD feel cumbersome when designing a more minimal microservice. Even the concept of a "Controller" feels misplaced for a microservice; request handler functions seem more appropriate.<p>Some findings I had when I tried it:<p>- Model validation is very optimistic; casting JSON numbers to strings automatically and vice-versa. To me this feels completely unacceptable. I've never seen something as surprising with regards to validation. While there are ways around this that requires a lot of work and code. In the end I worked around this by parsing the JSON input using JSON Schemas and ignore .NET Core model validation completely.<p>- The JSON deserialization is a separate step before the model validation; throwing 500 errors if JSON is formatted improperly. If you want consistent error handling and more than just the basic error output across your entire application (deserialization, model validation, business rules, app errors, etc...); good luck. .NET Core makes it difficult to achieve that goal. Same here I used a JSON Schema parsing library to overcome most of my problems and completely ignore .NET Core out-of-the-box features.<p>- Entity Framework feels as defacto standard; where basic SQL would do in Node or Go. It's a difficult sell to your colleagues if you'd argue EF is redundant and overly complex for the task at hand.<p>- I first tried to write .NET Core in VS Code like I do Nodejs, Python and Golang. It worked, but I would recommend anyone to use either Visual Studio or Rider instead. The auto highlighting, code hints and refactor tools are just so much better using those tools. Also I frequently ended up deleting the *.sln files and recalculate them using the CLI tool using VS Code. VS Code support for C# + .NET Core is just not mature yet.<p>- To set an environment variable in Linux the convention is UPPER_CASE. C# / .NET Core uses UpperCase__Double__UnderScore. I know it's minor, but it just feels weird and out-of-touch with linux devops, probably due to a windows-first approach.<p>- Lack of a popular alternatives like Kotlin or Groovy that provide a more lean & mean approach to tackle simple tasks or build basic microservices. (I don't count F# which is more in the functional domain)<p>- No out-of-the-box support for measuring test coverage in Linux. Community alternatives are lacking.<p>- ...<p>I'm convinced .NET Core is a step forward for the C# community. I'm not convinced it's a step forward for others.