Tuesday, 13 June 2017

Creating libraries and .NET Standard

As part of his fantastic 'What is .NET standard' presentation at DDD12, Adam Ralph provided an amazing amount of detail in such a short amount of time. One of the most valuable points, which is completely obvious when you think about it, is how you should work with .NET standard when creating libraries.

NET standard now comes in a multitude of flavours: currently 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6 and 2.0. When starting out with something new, we (as developers) often want to be as cutting edge as possible and probably haven't read the small print / finer details. So as a result, when creating our first .NET standard library a natural tendency is to create it targeting .NET Standard 2.0. Of course, that makes perfect sense - it's the newest so must be the best? It's definitely true, it is the latest and has the largest .NET framework coverage. BUT, and it is a big but. The library you are building can now only be used by other libraries targeting .NET Standard 2.0 (and newer). If the consumer of your library wants, or must, target .NET standard 1.6 (or older) then they will be unable to use your library due to this version incompatibility.

Therefore when starting a new library targetting .NET standard you should always start with targeting 1.0 and only increase the targeted version when you run into an unsupported framework call. If you are able to create a library that can target .NET standard 1.0 you should be really happy, it has the highest level of compatibility and will make your library's consumers lives much easier.

Like I say, when it's highlighted it makes perfect sense but I'm sure we've all seen that "Target .NET Standard Version" dropdown and wondered "When there's 2.0, why would I ever consider anything 1.x!"