title: Which .NET versions should be supported by NuGet packages to maximize their availability and functionality?
body: <p><strong>TL;DR:</strong></p>
  
  <ul>
  <li><p>Given: I wrote a library with relatively <strong>portable</strong> functionality (for example, <code>Left.Pad.©.dll</code>). I want to make it available though NuGet.</p></li>
  <li><p>Requirement: If somebody wants to use my library on <strong>any</strong> version of <strong>any</strong> platform on <strong>any</strong> version of <strong>any</strong> operating system with <strong>any</strong> updates installed by writing code in <strong>any</strong> IDE or <strong>any</strong> code editor, they should be able to do it.</p></li>
  <li><p>Question: What is the <strong>minimum</strong> set of <strong>NuGet <a href="https://docs.microsoft.com/en-us/nuget/schema/target-frameworks#supported-frameworks" rel="noreferrer">target frameworks</a></strong> to achieve that?</p></li>
  <li><p>Bonus question: If there're any "dead" frameworks which shouldn't be targeted, or something else which should be taken into consideration when choosing target frameworks, you can mention it too.</p></li>
  </ul>
  
  <hr>
  
  <p><strong>Thoughts (old version):</strong></p>
  
  <p>NuGet packages support <a href="https://docs.nuget.org/create/enforced-package-conventions#supporting-multiple-.net-framework-versions-and-profiles" rel="noreferrer">multiple .NET Framework versions and profiles</a>, for example, a package can provide net20, net30, net35, net40, net45, sl3, sl4, sl5 etc. versions. However, assuming <em>there aren't always differences in the functionality of a package</em>, providing a lot of versions would be a waste of build time and package size and cause unnecessary complexity. On the other hand, providing a package just for the lowest supported Framework version could cause missing functionality, for example .NET 4 supports in-process side-by-side execution of multiple CLR versions, but previous versions don't, so this feature will be lost if just a version for .NET 3.5 is provided (I'm not sure; I've never used it and don't know the details). If a PCL version is provided, the logic is simple I assume: just exclude versions which PCL covers.</p>