Package support policy for maintenance-packages

January 9, 2025 ยท View on GitHub

As it has been described in the .NET Release policies document, .NET library packages provide additional functionality that complements the .NET libraries and application frameworks like ASP.NET Core. The library packages have the same support model as the .NET versions that they target.

For example, Microsoft.Extensions.Logging supports multiple .NET versions via the frameworks it targets.

Our packages support any target framework versions that are currently in-support. You can find out which frameworks are supported by a specific package by visiting its NuGet page and navigating to the frameworks tab.

Additionally, you can find out which target frameworks are currently in-support by visiting the following pages:

Keep in mind that the minimum .NET Standard version supported by a package depends on which minimum .NET and .NET Framework versions are supported by the package. Packages and projects targeting .NET Standard are expected to be compatible between each other by following the same rules specified by our .NET Standard policy.

Release cadence

Some packages follow the same release cadence as the .NET release cadence, meaning we release a new version of the package each time we release a new .NET version. For example:

Note that the source code of those two packages lives in the dotnet/runtime repo.

On the other hand, the packages that come out from the dotnet/maintenance-packages repo have a separate, independent release cadence, meaning their servicing releases will come out of this repo and will not be bound by any pre-defined release schedule.

End of support

A package will be supported for as long as it targets frameworks that are still supported. For example: System.Numerics.Vectors is supported because it provides an implementation on .NET Framework 4.6.2, which is still in support.

Reporting issues

If you find an issue in an assembly that lives in this repo, please report it in our central repo: https://github.com/dotnet/runtime/issues/new/choose.

Should I consume this package? Which version should I consume?

Please refer to the table below to:

  • Learn if a package is still supported and in which target frameworks.
  • Learn what action you should take if you're actively consuming one of these packages:
    • Remove the package reference from your projects.
    • Update to the latest package version.
    • Migrate to another library.
    • Something else.
PackageSupportSupported where and why?Actions to take
Microsoft.Bcl.HashCodeYes
  • .NET Framework 4.6.2+: Provides the implementation of HashCode.
  • .NET 6+: The type is already part of the shared framework.
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
Microsoft.CSharpLimited
  • .NET Standard 2.0: Only used as a reference. Other uses are not supported.
  • .NET Framework 4.6.2+ and .NET 6+: The library is already part of the shared framework.
  • .NETStandard 2.0: Update.
  • .NET Framework 4.6.2+ and .NET 6+: Remove.
Microsoft.IO.RedistLimitedIntended for internal use only, not for general use. Use the equivalent System.IO APIs instead, which are part of the shared framework in all supported frameworks.Remove.
System.BuffersYes
  • .NET Framework 4.6.2+: Provides the implementation of ArrayPool<T>.
  • .NET 6+: The type is part of the shared framework.
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
System.Data.SqlClientLimited
  • .NET Framework 4.6.2+: The library is part of the shared framework.
  • .NET 8: Marked as obsolete, but supported until .NET 8 goes EOL.
  • All other frameworks: Not supported.
  • .NET Framework 4.6.2+: Remove.
  • .NET 8: System.Data.SqlClient is obsolete. Consider migrating to Microsoft.Data.SqlClient.
  • All other frameworks: Remove and migrate to Microsoft.Data.SqlClient.
System.Diagnostics.TracingNoEventSource is part of the shared framework in all supported frameworks.Remove.
System.JsonLimitedThe assembly targets in-support frameworks but it was designed for Silverlight, which is no longer supported. Use System.Text.Json instead, which is actively maintained.Remove.
System.MemoryYes
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
System.Net.WebSockets.WebSocketProtocolYesThe assembly targets in-support frameworks but the package was only needed in ASP.NET applications targeting .NET Standard 2.0 which required to use implementations provided in the package. These implementations are no longer required in currently supported frameworks.Remove.
System.Numerics.VectorsYes
  • .NET Framework 4.6.2+ and .NET Standard 2.0: Update.
  • .NET 6+: Remove.
System.Reflection.DispatchProxyYes
  • .NET Framework 4.6.2+: Provides an implementation of DispatchProxy.
  • .NET 6+: The type is part of the shared framework.
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
System.Runtime.CompilerServices.UnsafeYes
  • .NET Framework 4.6.2+: Provides the implementation of Unsafe.
  • .NET 6+: The type is part of the shared framework
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
System.Runtime.WindowsRuntimeNoBuilt-in support for WinRT has been removed from .NET.
Follow the recommended actions.
Remove.
System.Runtime.WindowsRuntime.UI.XamlNoBuilt-in support for WinRT has been removed from .NET.
Follow the recommended actions.
Remove.
System.Threading.Tasks.ExtensionsYes
  • .NET Framework 4.6.2+: Provides implementations of ValueTask and ValueTask<TResult>.
  • .NET 6+: The types are already part of the shared framework.
  • .NET Framework 4.6.2+: Update.
  • .NET 6+: Remove.
System.ValueTupleLimited
  • .NET Framework 4.7 and all supported .NET versions: The types are part of the shared framework.
  • All other supported .NET Frameworks: Provides implementations of System.ValueTuple and all its generic variants.
  • .NET Framework 4.7 and all supported .NET versions: Remove.
  • All other supported .NET Frameworks: Update.
System.Xml.XPath.XmlDocumentLimitedProvides the implementation of the XmlDocumentXPathExtensions extension methods. It is recommended that you call the extended APIs directly. Only use the package if you absolutely need to use the extension methods.Remove.