dotnet / dotnet/announcements

Dropping older framework versions

Open
#190 0 comments 0 reactions 0 assignees View on GitHub
.NET 6.0 Breaking Change
Dominant language
No language data
Stars
1.4k
Forks
53
PR merge metrics
No merged PRs in 30d

Description

Our packages drop support for frameworks older than .NET Framework 4.6.1, .NET Core 3.1, or .NET Standard 2.0.

## Reason

Dropping a framework from a package is a source breaking change. At the same time, continuing to build for all frameworks we ever shipped increases the complexity and size of a package. In the past, we've solved this issue by *harvesting*, which basically means:

1. We build only for "current" frameworks
2. During build, we download the earlier version of the package and "harvest" the binaries for earlier frameworks we no longer build for

While this means that you can always update without worrying that we drop a framework it also means that you'll never get any bug fixes or new features if you consume a harvested binary. In other words, harvested assets can't be serviced which is now hidden because from your point of view you're able to keep updating the package to a later version even thought you're consuming the same old binary that we're no longer updating.

For .NET 6, we plan to no longer perform any form of harvesting to ensure that all assets we ship can be serviced. This means we're dropping anything older than:

* .NET Framework 4.6.1
* .NET Core 3.1
* .NET Standard 2.0

If you're currently referencing an impacted package from an earlier framework, you'll no longer be able to update the referenced package to a later version. Your choice is to either retarget your project to a later version or not updating the referenced package (which is generally not a huge take back because you're already consuming a frozen binary anyways).

## Affected packages

These packages no longer ship old frameworks:

* `Microsoft.Extensions.DependencyModel`
* `Microsoft.Win32.Registry.AccessControl`
* `Microsoft.Win32.SystemEvents`
* `System.ComponentModel.Annotations`
* `System.ComponentModel.Composition`
* `System.ComponentModel.Composition.Registration`
* `System.Composition.AttributedModel`
* `System.Composition.Convention`
* `System.Composition.Hosting`
* `System.Composition.Runtime`
* `System.Composition.TypedParts`
* `System.Data.Odbc`
* `System.Diagnostics.DiagnosticSource`
* `System.Diagnostics.EventLog`
* `System.Diagnostics.PerformanceCounter`
* `System.DirectoryServices`
* `System.DirectoryServices.AccountManagement`
* `System.DirectoryServices.Protocols`
* `System.Drawing.Common`
* `System.IO.Packaging`
* `System.IO.Pipelines`
* `System.Management`
* `System.Net.Http.WinHttpHandler`
* `System.Reflection.Context`
* `System.Runtime.Caching`
* `System.Runtime.CompilerServices.Unsafe`
* `System.Security.Cryptography.Cng`
* `System.Security.Cryptography.OpenSsl`
* `System.Security.Cryptography.Pkcs`
* `System.Security.Cryptography.ProtectedData`
* `System.ServiceProcess.ServiceController`
* `System.Speech`
* `System.Text.Encoding.CodePages`
* `System.Text.Encodings.Web`
* `System.Threading.AccessControl`
* `System.Threading.Channels`

These packages will no longer be updated because their implementation is now part of the .NET 6 platform:

* `Microsoft.Win32.Registry`
* `System.ComponentModel.Annotations`
* `System.IO.FileSystem.AccessControl`
* `System.IO.Pipes.AccessControl`
* `System.Security.AccessControl`
* `System.Security.Cryptography.Cng`
* `System.Security.Cryptography.OpenSsl`
* `System.Security.Principal.Windows`

## Timelines

Many of these changes are shipping in .NET 6 Preview 5 while some will ship in .NET 6 Preview 6.

## Discussion

For a discussion, please comment in https://github.com/dotnet/runtime/issues/54365.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.