May 6th, 2019

.NET Core is the Future of .NET 

Scott Hunter [MSFT]
Director Program Management

We introduced .NET Core 1.0 on November 2014. The goal with .NET Core was to take the learning from our experience building, shipping and servicing .NET Framework over the previous 12 years and build a better product. Some examples of these improvements are side-by-side installations (you can install a new version and not worry about breaking existing apps), self-contained applications (applications can embed .NET, so .NET does not need to be on the computer), not being a component of the Windows operating system (.NET ships new releases independent of the OS schedule) and many more. On top of this, we made .NET Core open source and cross platform. 

.NET Core 1.0 was primarily focused on high performance web and microservices. .NET Core 2.0 added 20K more APIs and components like Razor Pages and SignalR, making it easier to port web applications to .NET Core. And now .NET Core 3.0 embraces the desktop by adding WinForms, WPF and Entity Framework 6 making it possible to port desktop applications to .NET Core.  

After .NET Core 3.0 we will not port any more features from .NET Framework. If you are a Web Forms developer and want to build a new application on .NET Core, we would recommend Blazor which provides the closest programming model. If you are a remoting or WCF Server developer and want to build a new application on .NET Core, we would recommend either ASP.NET Core Web APIs or gRPC, which provides cross platform and cross programming language contract based RPCs). If you are a Windows Workflow developer there is an open source port of Workflow to .NET Core 

With the .NET Core 3.0 release in September 2019 we think that all *new* .NET applications should be based on .NET Core. The primary application types from .NET Framework are supported, and where we did not port something over there is a recommended modern replacement. All future investment in .NET will be in .NET Core. This includes: Runtime, JIT, AOT, GC, BCL (Base Class Library), C#, VB.NET, F#, ASP.NET, Entity FrameworkML.NET, WinForms, WPF and Xamarin. 

.NET Framework 4.8 will be the last major version of .NET Framework. If you have existing .NET Framework applications that you are maintaining, there is no need to move these applications to .NET Core. We will continue to both service and support .NET Frameworkwhich includes bug, reliability and security fixes. It will continue to ship with Windows (much of Windows depends on .NET Framework) and we will continue to improve the tooling support for .NET in Visual Studio (Visual Studio is written on .NET Framework). 

Summary 

New applications should be built on .NET Core. .NET Core is where future investments in .NET will happen. Existing applications are safe to remain on .NET Framework which will be supported. Existing applications that want to take advantage of the new features in .NET should consider moving to .NET Core. As we plan into the future, we will be bringing in even more capabilities to the platform. You can read about our plans here. 

Author

Scott Hunter [MSFT]
Director Program Management

I work at Microsoft on Visual Studio and .NET - Including .NET Core, .NET tooling, Languages, ASP.NET , Entity Framework and Web Tooling

122 comments

Discussion is closed. Login to edit/delete existing comments.

  • S Kumar

    sir,
    how to create table if table not exists to existing database in ef core ?

    we don't use migration because our existing databases are with clients devices and want to create additional tables to their databases after updates for feature extensions...

    there was an option like Context.DbEntity.Create(); in ef6 but not getting in ef core to do so...

    I used the below but it also not creating tables which doesn't exist...

    try
    ...

    Read more
  • Jose Ramos

    Summary
    Drop out all your current business developments right now and migrate them to .Net Core because we don’t support’em in the future (reading between lines) [Sadly take it or not]

  • W. Bragdon

    How can you guys not bring Web Forms forward? This is so ridiculous. You are breaking backward compatibility.

    • ingmar pappel

      I totally agree. All these new web technologies are full of “tag soup” similar to Classic ASP (and this is bad). ASP.NET WebForms has clear separation of UI and code and is widely used in business solutions. Please port that!

    • Steve Naidamast

      I agree...

      I worked on a major MVC project back in 2010. In terms of efficiency and feasibility for the actual project, it was in my opinion a complete disaster. Since then, Microsoft has continued to promote this stupid paradigm thereby increasing the complexity of developing web applications substantially and to the point where Microsoft web development is a complete mess.

      Though I am retired, I am still developing and keeping abreast of the current...

      Read more
  • Jordan Ravka

    If .net core does nothing else but solve “dll hell” (which it has), it’s still worthy of a nobel prize. 
    .net core just works. I can’t overstate how much that has changed my average day.

  • Rod Macdonald

    Nice article, it's always good to see where things are from 30,000 feet! I do however continue to be concerned about the goals in terms of UI, or rather, I continue to be unclear it's direction in relation to .NET. Now it's clear ASP.NET continues the HTML paradigm. It's really good to hear Mike Harsh talk about WinForms continuity moving forwards with .NET 3, and I think most folks understand what that can do/can't do...

    Read more
  • Pete Wilson

    In October 2018 you said “We will make sure that .NET Framework always supports the latest networking protocols, security standards, and Windows features.”. Of course, we knew the .Net Framework was dead then (suggest reading The Cluetrain Manifesto). Does the fact that .Net Framework 4.8 is the last major version mean that support for new Windows features, etc. will no longer happen?

  • Joseph Rufft

    Scott:
    ASP.Net Web Forms are a must in .Net Core or .Net 5.  Blazor an unreleased experimental framework sounds like a risky choice and a possible waste of time and money.  Web Forms are mature, solve problems and work.  University’s might be behind on recent trends, but they still teach ASP.Net Web Forms in their curriculum.  WCF is also vital!
    This is so disappointing! 

  • Nicolas Torre

    Hi Scott; First of all thanks for the information. As developers we found out that debugging MVC core applications in a windows environment with IIS demands too much effort compared to debugging MVC.net. Same thoughts about (file system) deploying.

  • Mark Fonnemann

    For those of still developing strictly desktop applications, the lack of a cross-platform UI toolkit/framework in .NET 5 is going to be really frustrating. At the very least, I don’t understand why Mono’s port of WinForms can’t be leveraged as at least a starting point for this effort.

  • selvakumar palanisamy

    WS security is not supported by WCF on .NET Core. Having no support for this is a major set back for us, most of our existing web services requires this security in order to consume them.
    For reference:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://tmnas.com">
    <soapenv:Header>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
    <wsse:UsernameToken xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <wsse:Username>XXXXXX</wsse:Username>
    ...

    Read more
'; block.insertAdjacentElement('beforebegin', codeheader); let button = codeheader.querySelector('.copy-button'); button.addEventListener("click", async () => { let blockToCopy = block; await copyCode(blockToCopy, button); }); } }); async function copyCode(blockToCopy, button) { let code = blockToCopy.querySelector("code"); let text = ''; if (code) { text = code.innerText; } else { text = blockToCopy.innerText; } try { await navigator.clipboard.writeText(text); } catch (err) { console.error('Failed to copy:', err); } button.innerText = "Copied"; setTimeout(() => { button.innerHTML = '' + svgCodeIcon + ' Copy'; }, 1400); }