What is .NET Standard & Does it Relate to .NET Core?

When I talk to .NET developers, I find that there’s still a lot of confusion about what .NET Standard is and how it relates to .NET Core.
In fact, this weekend I’ll be giving a talk at the Music City Tech conference in Nashville, Tennessee about just that. I thought I’d share some of the basics here, but if you’d like more details and can get yourself to Nashville, I hope you will join us this weekend!
First, a few definitions…

.NET Core – Modern, cross-platform .NET

A couple years ago, Microsoft started creating .NET Core and on top of that, ASP.NET Core, originally known as ASP.NET vNext and ASP.NET 5. With .NET Core, Microsoft created it’s first truly cross-platform version of the .NET Framework that runs equally well on Mac, Linux, and Windows platforms.

.NET Framework – The “original recipe” .NET

The .NET Framework we’ve known and loved for years–the one that’s been shipping with Windows since XP. Over the years, it’s been adapted into several different flavors/platforms, including Mono, UWP, Silverlight, Windows 8, Windows Phone 8, and event .NET Micro. When there is a need to distinguish it from .NET Core, it is often called the full framework of just the .NET Framework. Especially because .NET Core and .NET Standard came about at the same time, one can be forgiven for thinking that .NET “Standard” might simply mean the plain-old, “standard” version of .NET that’s not .NET Core. But it doesn’t mean that.

.NET Standard – A standard for .NET implementation, and way to share code across them

When Microsoft created yet another flavor of .NET in .NET Core, they saw the need to be able to compile a library or package and reuse it across all the .NET platforms without requiring a recompile. They did it by creating a new standard (as in a measure, norm, or pattern) which platforms of .NET could either conform to or not. They called this standard the .NET Standard. The higher the .NET Standard version number gets, the greater the number of guaranteed APIs that will be implemented, but also, the fewer the number of platforms there will be that implement it. Or, to put it another way, the lower your standards are, the higher your backward-compatibility will be, and visa-versa.

As the .NET Standard version goes up, the number of supported platforms goes down

Why .NET Standard?

If you’re familiar with the older ways we used to try to share code across flavors of the framework, you’ll recognize the name Portable Class Libraries (PCLs). Before .NET Standard, this was the way you would share code across different types of .NET projects. There were many problems with PCLs, but one of them was the way they specified their supported platforms. They did it by enumerating them, which meant each time there were new flavors of .NET, it would create many new permutations with every possible combination. It was almost impossible to keep track of an very difficult to use.
.NET Standard approaches the problem in a different way. Instead, it adds API surface area in concentric rings, like the growth rings of a tree. Each new version simple adds more APIs around the ones there were already there. Each .NET platform, then, either implements all of those APIs or not. If it doesn’t it’s compatible with that version of .NET Standard.
 

David Fowler uses the analogy of interfaces and implementation classes to explain what .NET Standard is in a very developer-friendly way, and I think it’s very apt.
But, perhaps the most simple way to understand .NET Standard is with a simple table that Microsoft publishes on the .NET Standard github project which I’ve placed below.

This table shows the .NET flavors/platforms listed on the left and the .NET Standard versions along the top. The version numbers in the cells where these two meet are the minimum version of that platform that implement the selected version of .NET Standard. For example, If you want to create a library that will be used on .NET Core 2.0 or above and from the full Framework 4.6.1 or above, you can do so by targeting .NET Standard 2.0. However, if you also want to be compatible with .NET 4.6, you’ll need your library to target .NET Standard 1.3, which will mean you’ll lose access to all the APIs added between Standard 1.3 and 2.0.

How Does It Work?

When you reference .NET Standard, you’re actually referencing a DLL call netstandard.dll, which has each type forwarded to the underlying platform’s implementation of that type.

[assembly:TypeForwardedToAttribute(typeof(PlatformX.Example))]
public class Example ...

It’s pretty ingenious, really, and it create a very small netstandard.dll with no actual implementation of its own!

Every Day Use for .NET Standard

Unless you publish your own shared libraries or Nuget packages, the place you’re most likely to encounter .NET Standard is in the UI for Nuget when you’re referencing a package.

If we look at the current Newtonsoft.Json listing in Nuget, you can see what .NET platforms it targets, including .NET Standard 1.0, 1.3, and 2.0, as well as any other dependencies each version will take in order to work. Notice that the 1.0 and 1.3 have to take a dependency on external serialization libraries, and 2.0 does not? That’s because .NET Standard 2.0 was the first to include the System.Serialization namespace.

Finally, A Useful Tool

There’s a great, interactive implementation of the versions table shown above that was created by Immo Landwerth, Program Manager on the .NET team at Microsoft. You can play with it to get a better feeling for how .NET Standard versions map to different platform versions.
It’s available on his web site.

Related Blog Posts

We hope you’ve found this to be helpful and are walking away with some new, useful insights. If you want to learn more, here are a couple of related articles that others also usually find to be interesting:

Our Gear Is Packed and We're Excited to Explore with You

Ready to come with us? 

Together, we can map your company’s tech journey and start down the trails. If you’re set to take the first step, simply fill out the form below. We’ll be in touch – and you’ll have a partner who cares about you and your company. 

We can’t wait to hear from you! 

This field is for validation purposes and should be left unchanged.

Together, we can map your company’s tech journey and start down the trails. If you’re set to take the first step, simply fill out the form below. We’ll be in touch – and you’ll have a partner who cares about you and your company. 

We can’t wait to hear from you! 

Montage Portal

Montage Furniture Services provides furniture protection plans and claims processing services to a wide selection of furniture retailers and consumers.

Project Background

Montage was looking to build a new web portal for both Retailers and Consumers, which would integrate with Dynamics CRM and other legacy systems. The portal needed to be multi tenant and support branding and configuration for different Retailers. Trailhead architected the new Montage Platform, including the Portal and all of it’s back end integrations, did the UI/UX and then delivered the new system, along with enhancements to DevOps and processes.

Logistics

We’ve logged countless miles exploring the tech world. In doing so, we gained the experience that enables us to deliver your unique software and systems architecture needs. Our team of seasoned tech vets can provide you with:

Custom App and Software Development

We collaborate with you throughout the entire process because your customized tech should fit your needs, not just those of other clients.

Cloud and Mobile Applications

The modern world demands versatile technology, and this is exactly what your mobile and cloud-based apps will give you.

User Experience and Interface (UX/UI) Design

We want your end users to have optimal experiences with tech that is highly intuitive and responsive.

DevOps

This combination of Agile software development and IT operations provides you with high-quality software at reduced cost, time, and risk.

Trailhead stepped into a challenging project – building our new web architecture and redeveloping our portals at the same time the business was migrating from a legacy system to our new CRM solution. They were able to not only significantly improve our web development architecture but our development and deployment processes as well as the functionality and performance of our portals. The feedback from customers has been overwhelmingly positive. Trailhead has proven themselves to be a valuable partner.

– BOB DOERKSEN, Vice President of Technology Services
at Montage Furniture Services

Technologies Used

When you hit the trails, it is essential to bring appropriate gear. The same holds true for your digital technology needs. That’s why Trailhead builds custom solutions on trusted platforms like .NET, Angular, React, and Xamarin.

Expertise

We partner with businesses who need intuitive custom software, responsive mobile applications, and advanced cloud technologies. And our extensive experience in the tech field allows us to help you map out the right path for all your digital technology needs.

  • Project Management
  • Architecture
  • Web App Development
  • Cloud Development
  • DevOps
  • Process Improvements
  • Legacy System Integration
  • UI Design
  • Manual QA
  • Back end/API/Database development

We partner with businesses who need intuitive custom software, responsive mobile applications, and advanced cloud technologies. And our extensive experience in the tech field allows us to help you map out the right path for all your digital technology needs.

Our Gear Is Packed and We're Excited to Explore with You

Ready to come with us? 

Together, we can map your company’s tech journey and start down the trails. If you’re set to take the first step, simply fill out the contact form. We’ll be in touch – and you’ll have a partner who cares about you and your company. 

We can’t wait to hear from you! 

This field is for validation purposes and should be left unchanged.

Thank you message.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.