Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/core.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--microsoft-support.md2
-rw-r--r--release-notes/6.0/README.md7
-rw-r--r--release-notes/6.0/cve.md4
-rw-r--r--release-notes/6.0/known-issues.md19
-rw-r--r--release-notes/6.0/supported-os.md4
-rw-r--r--release-notes/7.0/README.md8
-rw-r--r--release-notes/7.0/known-issues.md11
-rw-r--r--release-notes/7.0/preview/7.0.0-rc.2.md2
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2.md14
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Components.Routing.md11
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.HttpResults.md107
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.Metadata.md27
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.md46
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.OutputCaching.md40
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Routing.md11
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.md21
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.Extensions.DependencyInjection.md10
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2.md7
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2_System.Runtime.InteropServices.JavaScript.md18
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/Microsoft.WindowsDesktop.App/7.0-rc2.md6
-rw-r--r--release-notes/7.0/preview/api-diff/rc2/README.md7
-rw-r--r--release-notes/7.0/supported-os.md4
-rw-r--r--release-policies.md52
-rw-r--r--releases.md12
24 files changed, 396 insertions, 54 deletions
diff --git a/microsoft-support.md b/microsoft-support.md
index d892a90d..6a508aec 100644
--- a/microsoft-support.md
+++ b/microsoft-support.md
@@ -2,7 +2,7 @@
[Microsoft supports .NET](https://dotnet.microsoft.com/platform/support/policy) on multiple operating systems, per the [Microsoft Modern Lifecycle](https://support.microsoft.com/help/30881/modern-lifecycle-policy).
-Support is provided for: .NET SDK, .NET runtime, ASP.NET Core, and EF Core.
+Support is provided for: .NET SDK, .NET Runtimes, ASP.NET Core, and EF Core.
Support has two key benefits:
diff --git a/release-notes/6.0/README.md b/release-notes/6.0/README.md
index fdaeb023..66ae7b33 100644
--- a/release-notes/6.0/README.md
+++ b/release-notes/6.0/README.md
@@ -1,9 +1,10 @@
# .NET 6
-[.NET 6](https://devblogs.microsoft.com/dotnet/announcing-net-6-rc1/) is an [LTS release](../../release-policies.md) and will be supported for three years, from November 2021 to November 2024. It is [supported by Microsoft](../../microsoft-support.md) on [multiple operating systems](supported-os.md).
+[.NET 6](https://devblogs.microsoft.com/dotnet/announcing-net-6/) is an [Long Term Support (LTS)](../../release-policies.md) release and will be supported for three years, from November 8, 2021 to November 12, 2024. It is [supported by Microsoft](../../microsoft-support.md) on [multiple operating systems](supported-os.md).
-- [Downloads](https://dotnet.microsoft.com/download/dotnet/6.0) (also see [Releases](#releases))
-- [Containers](https://hub.docker.com/_/microsoft-dotnet)
+- [Downloads](https://dotnet.microsoft.com/download/dotnet/6.0)
+- [Linux Package Managers](https://docs.microsoft.com/dotnet/core/install/linux)
+- [Containers](https://mcr.microsoft.com/catalog?search=dotnet/)
- [Supported OSes](supported-os.md)
- [Known Issues](known-issues.md)
- [Installation instructions](install.md)
diff --git a/release-notes/6.0/cve.md b/release-notes/6.0/cve.md
index 6c40fbc8..d1afcc24 100644
--- a/release-notes/6.0/cve.md
+++ b/release-notes/6.0/cve.md
@@ -11,13 +11,13 @@ Your app may be vulnerable to the following published security [CVEs](https://ww
- 6.0.10 (October 2022)
- No CVEs currently apply.
- 6.0.9 (September 2022)
- - [CVE 2022-41032 | .NET Core Elevation of Privilege Vulnerability](https://github.com/dotnet/announcements/issues/xxx)
+ - [CVE 2022-41032 | .NET Core Elevation of Privilege Vulnerability](https://github.com/dotnet/announcements/issues/236)
- 6.0.8 (August 2022)
- [CVE 2022-38013 | .NET Core Denial of Service Vulnerability](https://github.com/dotnet/announcements/issues/234)
- 6.0.7 (July 2022)
- [CVE 2022-34716 | .NET Core Information Disclosure Vulnerability](https://github.com/dotnet/announcements/issues/232)
- 6.0.6 (June 2022)
- - No CVEs currently apply.
+ - No additional CVEs.
- 6.0.5 (May 2022)
- [CVE 2022-30184 | .NET Core Information Disclosure Vulnerability](https://github.com/dotnet/announcements/issues/225)
- 6.0.4 (April 2022)
diff --git a/release-notes/6.0/known-issues.md b/release-notes/6.0/known-issues.md
index e7223355..5bd25458 100644
--- a/release-notes/6.0/known-issues.md
+++ b/release-notes/6.0/known-issues.md
@@ -19,10 +19,17 @@ The optional workload manifest MSIs in the SDK populate the Language column in t
#### Workaround
Running the 6.0.101 SDK bundle (without using MU) results in the context changing to MSIINSTALLCONTEXT_MACHINE, this allows the API call to query the INSTALLEDLANGUAGE to complete and the SDK Wix bundle install succeeds.
-Therefore a workaround for this issue is to install the 6.0.101 SDK bundle manually by downloading it from the [.NET download site](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). Once this is successfully installed scanning MU again will result in clearing the previous error.
+Therefore a workaround for this issue is to install the 6.0.101 SDK bundle manually by downloading it from the [.NET download site](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). Once this is successfully installed scanning MU again will result in clearing the previous error.
-As described previously the computer can be secured by installing the VS 17.0.3 update, even if the MU update results in a failure so the MU failure is not a critical factor from a security perspective. Therefore for the case where we expect the VS update to offer and secure the computer we will be making a change to not offer the MU update to those computers to avoid the MU failure. For the case where .NET 6 was installed as a standalone version and VS is not expected to patch the computer we will continue to offer the 6.0.1 update via MU.
+As described previously the computer can be secured by installing the VS 17.0.3 update, even if the MU update results in a failure so the MU failure is not a critical factor from a security perspective. Therefore for the case where we expect the VS update to offer and secure the computer we will be making a change to not offer the MU update to those computers to avoid the MU failure. For the case where .NET 6 was installed as a standalone version and VS is not expected to patch the computer we will continue to offer the 6.0.1 update via MU.
+## Failure when using ICU App-Local feature in .NET 6.0.10
+### Summary
+Applications using the [App-local ICU](https://learn.microsoft.com/en-us/dotnet/core/extensions/globalization-icu#app-local-icu) feature to deploy ICU library binaries with the application binaries can experience throwing unhandled [AccessViolationException](https://learn.microsoft.com/en-us/dotnet/api/system.accessviolationexception?view=net-6.0). The [reported issue](https://github.com/dotnet/runtime/issues/77045) contains more information about this failure.
+
+**Workarounds**
+- If having the ICU app-local feature to use ICU in the .NET 6.0 application when running on OS like `Windows Server 2019`, migration to .NET 7.0 would help as ICU gets loaded in the application without the need to use the app-local feature. .NET 7.0 supports loading ICU by default on `Windows Server 2019`.
+- Use a different .NET version than `6.0.10` like `6.0.9` or `6.0.11` or any later version including .NET `7.0`.
## .NET SDK
@@ -54,7 +61,7 @@ Example rollback file for 6.0.400
"microsoft.net.workload.emscripten": "6.0.4/6.0.300"
}
```
-
+
## ASP.NET Core
### SPA template issues with Individual authentication when running in development
@@ -109,7 +116,7 @@ CoreCLR Version: 6.0.121.56705
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileLoadException: Could not load file or assembly 'System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
- at WinFormsApp1.Program.Main()
+ at WinFormsApp1.Program.Main()
```
This is a result of Windows Desktop servicing ref pack in 6.0.2, which was shipped with an incorrect version.
@@ -151,7 +158,7 @@ This happened because WPF builds in 6.0.7 onwards, only considered source genera
**Fix:**
* To enable build in Windows Desktop 6.0.7, navigate to the directory containing the `Microsoft.WinFx.targets` file ( `C:\Program Files\dotnet\sdk\6.0.302\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets` )
-* Add the following target in the file :
+* Add the following target in the file :
```xml
<Target Name="RemoveDuplicateAnalyzers" BeforeTargets="CoreCompile">
@@ -160,5 +167,5 @@ This happened because WPF builds in 6.0.7 onwards, only considered source genera
<Analyzer Remove="@(Analyzer)" />
<Analyzer Include="@(FilteredAnalyzer)" />
</ItemGroup>
- </Target>
+ </Target>
```
diff --git a/release-notes/6.0/supported-os.md b/release-notes/6.0/supported-os.md
index 2d4de3eb..cddd1048 100644
--- a/release-notes/6.0/supported-os.md
+++ b/release-notes/6.0/supported-os.md
@@ -1,8 +1,8 @@
# .NET 6 - Supported OS versions
-[.NET 6](README.md) [is supported](https://github.com/dotnet/core/blob/main/microsoft-support.md) on multiple operating systems per their [lifecycle policy](../../os-lifecycle-policy.md).
+[.NET 6](README.md) is an [Long Term Support (LTS)](../../release-policies.md) release and [is supported](../../microsoft-support.md) on multiple operating systems per their lifecycle policy.
-For issues with .NET on operating systems not listed here, please open a GitHub issue in the appropriate .NET repository or contact the OS maintainer community . Please see [.NET Repos](https://github.com/dotnet/core/blob/main/Documentation/core-repos.md) for the repository list.
+For issues with .NET on operating systems not listed here, please open a GitHub issue in the appropriate .NET repository or contact the OS maintainer community . See [.NET Repos](../../Documentation/core-repos.md) for the repository list.
## Windows
diff --git a/release-notes/7.0/README.md b/release-notes/7.0/README.md
index 4fdef783..5977beec 100644
--- a/release-notes/7.0/README.md
+++ b/release-notes/7.0/README.md
@@ -1,10 +1,10 @@
# .NET 7
-[.NET 7](https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-2/) will be a [current release](../../release-policies.md) and will be supported for 18 months, from November 2022 to May 14, 2024. It is [supported by Microsoft](../../microsoft-support.md) on [multiple operating systems](supported-os.md).
+[.NET 7](https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-4/) is a [Standard Term Support (STS)](../../release-policies.md) release and will be supported for 18 months, from November 8th, 2022 to May 14th, 2024. It is [supported by Microsoft](../../microsoft-support.md) on [multiple operating systems](supported-os.md).
-
-- [Downloads](https://dotnet.microsoft.com/download/dotnet/7.0) (also see [Releases](#releases))
-- [Containers](https://hub.docker.com/_/microsoft-dotnet)
+- [Downloads](https://dotnet.microsoft.com/download/dotnet/7.0)
+- [Linux Package Managers](https://docs.microsoft.com/dotnet/core/install/linux)
+- [Containers](https://mcr.microsoft.com/catalog?search=dotnet/)
- [Supported OSes](supported-os.md)
- [Known Issues](known-issues.md)
- [Installation instructions](install.md)
diff --git a/release-notes/7.0/known-issues.md b/release-notes/7.0/known-issues.md
index 23eb7714..5181d0e3 100644
--- a/release-notes/7.0/known-issues.md
+++ b/release-notes/7.0/known-issues.md
@@ -186,3 +186,14 @@ To circumvent this issue, you will need to modify the local installation to prob
5. Note that the install directory for the SDK may not be deleted during uninstall due to applying this workaround, e.g. when updating to 7.0.0-rc.2. If that occurs, delete the directory manually.
This issue will be resolved in .NET 7 RC 2.
+
+## ASP.NET Core
+
+### [7.0] bind get, set, after can't be used in 7.0 Blazor applications
+In .NET 7 Preview 7, we've introduced [a new feature for binding values to components](https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-7/#blazor-data-binding-get-set-after-modifiers) using the new `bind:get`, `bind:set` and `bind:after` syntax.
+As part of a follow-up work to address some issues we've learned about related to that feature, we had to take a two-part fix both in dotnet/aspnetcore and dotnet/razor-compiler repos. Unfortunately, we had an issue with our dependency update process and the razor compiler changes did not make it into the 7.0 build. As a result, when you try to use bind, get, set, after on 7.0 Blazor application, the compiler will emit code against non existing APIs and users will be presented with an error like `Can't convert from EventCallback<T> to Func<T,Task>`.
+An update for the compiler is planned as part of the 7.0.1 release that will update the compiler to target the new APIs and make this feature work as expected from them on.
+
+
+
+Users that are not relying on bind get, set, after will not be affected by this issue.
diff --git a/release-notes/7.0/preview/7.0.0-rc.2.md b/release-notes/7.0/preview/7.0.0-rc.2.md
index c0cbfb6b..f37be208 100644
--- a/release-notes/7.0/preview/7.0.0-rc.2.md
+++ b/release-notes/7.0/preview/7.0.0-rc.2.md
@@ -56,7 +56,7 @@ The following repos have been updated.
## Notable Changes
.NET 7.0.0-RC 2 release carries security fixes.
-# Microsoft Security Advisory CVE-2022-38013: .NET Denial of Service Vulnerability
+# Microsoft Security Advisory CVE-2022-41032 | .NET Elevation of Privilege Vulnerability
## <a name="executive-summary"></a>Executive summary
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2.md
new file mode 100644
index 00000000..a34c8b8a
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2.md
@@ -0,0 +1,14 @@
+# API Difference 7.0-rc1 vs 7.0-rc2
+
+API listing follows standard diff formatting.
+Lines preceded by a '+' are additions and a '-' indicates removal.
+
+* [Microsoft.AspNetCore.Components.Routing](7.0-rc2_Microsoft.AspNetCore.Components.Routing.md)
+* [Microsoft.AspNetCore.Http](7.0-rc2_Microsoft.AspNetCore.Http.md)
+* [Microsoft.AspNetCore.Http.HttpResults](7.0-rc2_Microsoft.AspNetCore.Http.HttpResults.md)
+* [Microsoft.AspNetCore.Http.Metadata](7.0-rc2_Microsoft.AspNetCore.Http.Metadata.md)
+* [Microsoft.AspNetCore.OutputCaching](7.0-rc2_Microsoft.AspNetCore.OutputCaching.md)
+* [Microsoft.AspNetCore.Routing](7.0-rc2_Microsoft.AspNetCore.Routing.md)
+* [Microsoft.AspNetCore.Server.Kestrel.Transport.Quic](7.0-rc2_Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.md)
+* [Microsoft.Extensions.DependencyInjection](7.0-rc2_Microsoft.Extensions.DependencyInjection.md)
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Components.Routing.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Components.Routing.md
new file mode 100644
index 00000000..db194b76
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Components.Routing.md
@@ -0,0 +1,11 @@
+# Microsoft.AspNetCore.Components.Routing
+
+``` diff
+ namespace Microsoft.AspNetCore.Components.Routing {
+- public sealed class NavigationLock : IAsyncDisposable, IComponent {
++ public sealed class NavigationLock : IAsyncDisposable, IComponent, IHandleAfterRender {
++ Task IHandleAfterRender.OnAfterRenderAsync();
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.HttpResults.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.HttpResults.md
new file mode 100644
index 00000000..d027e587
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.HttpResults.md
@@ -0,0 +1,107 @@
+# Microsoft.AspNetCore.Http.HttpResults
+
+``` diff
+ namespace Microsoft.AspNetCore.Http.HttpResults {
+ public sealed class Accepted : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Accepted<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class AcceptedAtRoute : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class AcceptedAtRoute<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class BadRequest : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class BadRequest<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Conflict : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Conflict<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Created : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Created<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class CreatedAtRoute : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class CreatedAtRoute<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public class NoContent : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class NotFound : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class NotFound<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Ok : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Ok<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Results<TResult1, TResult2> : IEndpointMetadataProvider, INestedHttpResult, IResult where TResult1 : IResult where TResult2 : IResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Results<TResult1, TResult2, TResult3> : IEndpointMetadataProvider, INestedHttpResult, IResult where TResult1 : IResult where TResult2 : IResult where TResult3 : IResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Results<TResult1, TResult2, TResult3, TResult4> : IEndpointMetadataProvider, INestedHttpResult, IResult where TResult1 : IResult where TResult2 : IResult where TResult3 : IResult where TResult4 : IResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5> : IEndpointMetadataProvider, INestedHttpResult, IResult where TResult1 : IResult where TResult2 : IResult where TResult3 : IResult where TResult4 : IResult where TResult5 : IResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class Results<TResult1, TResult2, TResult3, TResult4, TResult5, TResult6> : IEndpointMetadataProvider, INestedHttpResult, IResult where TResult1 : IResult where TResult2 : IResult where TResult3 : IResult where TResult4 : IResult where TResult5 : IResult where TResult6 : IResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class UnprocessableEntity : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class UnprocessableEntity<TValue> : IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<TValue> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public sealed class ValidationProblem : IContentTypeHttpResult, IEndpointMetadataProvider, IResult, IStatusCodeHttpResult, IValueHttpResult, IValueHttpResult<HttpValidationProblemDetails> {
+- static void IEndpointMetadataProvider.PopulateMetadata(EndpointMetadataContext context);
++ static void IEndpointMetadataProvider.PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.Metadata.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.Metadata.md
new file mode 100644
index 00000000..9f2e038a
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.Metadata.md
@@ -0,0 +1,27 @@
+# Microsoft.AspNetCore.Http.Metadata
+
+``` diff
+ namespace Microsoft.AspNetCore.Http.Metadata {
+- public sealed class EndpointMetadataContext {
+- public EndpointMetadataContext(MethodInfo method, IList<object> endpointMetadata, IServiceProvider applicationServices);
+- public IServiceProvider ApplicationServices { get; }
+- public IList<object> EndpointMetadata { get; }
+- public MethodInfo Method { get; }
+- }
+- public sealed class EndpointParameterMetadataContext {
+- public EndpointParameterMetadataContext(ParameterInfo parameter, IList<object> endpointMetadata, IServiceProvider applicationServices);
+- public IServiceProvider ApplicationServices { get; }
+- public IList<object> EndpointMetadata { get; }
+- public ParameterInfo Parameter { get; }
+- }
+ public interface IEndpointMetadataProvider {
+- static abstract void PopulateMetadata(EndpointMetadataContext context);
++ static abstract void PopulateMetadata(MethodInfo method, EndpointBuilder builder);
+ }
+ public interface IEndpointParameterMetadataProvider {
+- static abstract void PopulateMetadata(EndpointParameterMetadataContext parameterContext);
++ static abstract void PopulateMetadata(ParameterInfo parameter, EndpointBuilder builder);
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.md
new file mode 100644
index 00000000..42b1021c
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Http.md
@@ -0,0 +1,46 @@
+# Microsoft.AspNetCore.Http
+
+``` diff
+ namespace Microsoft.AspNetCore.Http {
+ public sealed class EndpointFilterFactoryContext {
++ public EndpointFilterFactoryContext();
+- public EndpointFilterFactoryContext(MethodInfo methodInfo, IList<object> endpointMetadata, IServiceProvider applicationServices);
+- public IServiceProvider ApplicationServices { get; }
++ public IServiceProvider ApplicationServices { get; set; }
+- public IList<object> EndpointMetadata { get; }
+- public MethodInfo MethodInfo { get; }
++ public required MethodInfo MethodInfo { get; set; }
+ }
+ [UnconditionalSuppressMessageAttribute("Trimmer", "IL2026", Justification="RequestDelegateFactory.Create requires unreferenced code.")]
+ [UnconditionalSuppressMessageAttribute("Trimmer", "IL2060", Justification="RequestDelegateFactory.Create requires unreferenced code.")]
+ [UnconditionalSuppressMessageAttribute("Trimmer", "IL2072", Justification="RequestDelegateFactory.Create requires unreferenced code.")]
+ [UnconditionalSuppressMessageAttribute("Trimmer", "IL2075", Justification="RequestDelegateFactory.Create requires unreferenced code.")]
+ [UnconditionalSuppressMessageAttribute("Trimmer", "IL2077", Justification="RequestDelegateFactory.Create requires unreferenced code.")]
+ public static class RequestDelegateFactory {
+- [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
+- public static RequestDelegateResult Create(Delegate handler, RequestDelegateFactoryOptions? options = null);
++ [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
++ public static RequestDelegateResult Create(Delegate handler, RequestDelegateFactoryOptions? options);
++ [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
++ public static RequestDelegateResult Create(Delegate handler, RequestDelegateFactoryOptions? options = null, RequestDelegateMetadataResult? metadataResult = null);
+- [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
+- public static RequestDelegateResult Create(MethodInfo methodInfo, Func<HttpContext, object>? targetFactory = null, RequestDelegateFactoryOptions? options = null);
++ [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
++ public static RequestDelegateResult Create(MethodInfo methodInfo, Func<HttpContext, object>? targetFactory, RequestDelegateFactoryOptions? options);
++ [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
++ public static RequestDelegateResult Create(MethodInfo methodInfo, Func<HttpContext, object>? targetFactory = null, RequestDelegateFactoryOptions? options = null, RequestDelegateMetadataResult? metadataResult = null);
++ [RequiresUnreferencedCodeAttribute("RequestDelegateFactory performs object creation, serialization and deserialization on the delegates and its parameters. This cannot be statically analyzed.")]
++ public static RequestDelegateMetadataResult InferMetadata(MethodInfo methodInfo, RequestDelegateFactoryOptions? options = null);
+ }
+ public sealed class RequestDelegateFactoryOptions {
++ public EndpointBuilder EndpointBuilder { get; set; }
+- public IReadOnlyList<Func<EndpointFilterFactoryContext, EndpointFilterDelegate, EndpointFilterDelegate>>? EndpointFilterFactories { get; set; }
+- public IList<object>? EndpointMetadata { get; set; }
+ }
++ public sealed class RequestDelegateMetadataResult {
++ public RequestDelegateMetadataResult();
++ public required IReadOnlyList<object> EndpointMetadata { get; set; }
++ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.OutputCaching.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.OutputCaching.md
new file mode 100644
index 00000000..8ffd6dff
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.OutputCaching.md
@@ -0,0 +1,40 @@
+# Microsoft.AspNetCore.OutputCaching
+
+``` diff
+ namespace Microsoft.AspNetCore.OutputCaching {
+ public sealed class CacheVaryByRules {
++ public string CacheKeyPrefix { get; set; }
+- public IDictionary<string, string> VaryByCustom { get; }
++ public bool VaryByHost { get; set; }
+- public StringValues VaryByPrefix { get; set; }
++ public IDictionary<string, string> VaryByValues { get; }
+ }
+ public class OutputCacheOptions {
++ public void AddBasePolicy(Action<OutputCachePolicyBuilder> build, bool excludeDefaultPolicy);
++ public void AddPolicy(string name, Action<OutputCachePolicyBuilder> build, bool excludeDefaultPolicy);
+ }
+ public sealed class OutputCachePolicyBuilder {
+- public OutputCachePolicyBuilder();
+- public OutputCachePolicyBuilder AllowLocking(bool lockResponse = true);
+- public OutputCachePolicyBuilder Clear();
++ public OutputCachePolicyBuilder SetCacheKeyPrefix(Func<HttpContext, string> keyPrefix);
++ public OutputCachePolicyBuilder SetCacheKeyPrefix(Func<HttpContext, CancellationToken, ValueTask<string>> keyPrefix);
++ public OutputCachePolicyBuilder SetCacheKeyPrefix(string keyPrefix);
++ public OutputCachePolicyBuilder SetLocking(bool enabled);
++ public OutputCachePolicyBuilder SetVaryByHeader(string headerName, params string[] headerNames);
++ public OutputCachePolicyBuilder SetVaryByHeader(string[] headerNames);
++ public OutputCachePolicyBuilder SetVaryByHost(bool enabled);
++ public OutputCachePolicyBuilder SetVaryByQuery(string queryKey, params string[] queryKeys);
++ public OutputCachePolicyBuilder SetVaryByQuery(string[] queryKeys);
++ public OutputCachePolicyBuilder SetVaryByRouteValue(string routeValueName, params string[] routeValueNames);
++ public OutputCachePolicyBuilder SetVaryByRouteValue(string[] routeValueNames);
+- public OutputCachePolicyBuilder VaryByHeader(params string[] headerNames);
+- public OutputCachePolicyBuilder VaryByQuery(params string[] queryKeys);
+- public OutputCachePolicyBuilder VaryByRouteValue(params string[] routeValueNames);
+- public OutputCachePolicyBuilder VaryByValue(Func<HttpContext, string> varyBy);
+- public OutputCachePolicyBuilder VaryByValue(Func<HttpContext, CancellationToken, ValueTask<string>> varyBy);
++ public OutputCachePolicyBuilder VaryByValue(string key, string value);
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Routing.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Routing.md
new file mode 100644
index 00000000..625401b3
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Routing.md
@@ -0,0 +1,11 @@
+# Microsoft.AspNetCore.Routing
+
+``` diff
+ namespace Microsoft.AspNetCore.Routing {
+ public sealed class RouteEndpointBuilder : EndpointBuilder {
+- public RouteEndpointBuilder(RequestDelegate requestDelegate, RoutePattern routePattern, int order);
++ public RouteEndpointBuilder(RequestDelegate? requestDelegate, RoutePattern routePattern, int order);
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.md
new file mode 100644
index 00000000..5e76fb62
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.md
@@ -0,0 +1,21 @@
+# Microsoft.AspNetCore.Server.Kestrel.Transport.Quic
+
+``` diff
+ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Quic {
+ public sealed class QuicTransportOptions {
+- public int MaxBidirectionalStreamCount { get; set; }
++ [RequiresPreviewFeaturesAttribute]
++ public int MaxBidirectionalStreamCount { get; set; }
+- public long? MaxReadBufferSize { get; set; }
++ [RequiresPreviewFeaturesAttribute]
++ public long? MaxReadBufferSize { get; set; }
+- public int MaxUnidirectionalStreamCount { get; set; }
++ [RequiresPreviewFeaturesAttribute]
++ public int MaxUnidirectionalStreamCount { get; set; }
+- public long? MaxWriteBufferSize { get; set; }
++ [RequiresPreviewFeaturesAttribute]
++ public long? MaxWriteBufferSize { get; set; }
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.Extensions.DependencyInjection.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.Extensions.DependencyInjection.md
new file mode 100644
index 00000000..ae72f496
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.AspNetCore.App/7.0-rc2_Microsoft.Extensions.DependencyInjection.md
@@ -0,0 +1,10 @@
+# Microsoft.Extensions.DependencyInjection
+
+``` diff
+ namespace Microsoft.Extensions.DependencyInjection {
+ public static class OutputCacheConventionBuilderExtensions {
++ public static TBuilder CacheOutput<TBuilder>(this TBuilder builder, Action<OutputCachePolicyBuilder> policy, bool excludeDefaultPolicy) where TBuilder : IEndpointConventionBuilder;
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2.md
new file mode 100644
index 00000000..5937d718
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2.md
@@ -0,0 +1,7 @@
+# API Difference 7.0-rc1 vs 7.0-rc2
+
+API listing follows standard diff formatting.
+Lines preceded by a '+' are additions and a '-' indicates removal.
+
+* [System.Runtime.InteropServices.JavaScript](7.0-rc2_System.Runtime.InteropServices.JavaScript.md)
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2_System.Runtime.InteropServices.JavaScript.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2_System.Runtime.InteropServices.JavaScript.md
new file mode 100644
index 00000000..2aaba97d
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.NETCore.App/7.0-rc2_System.Runtime.InteropServices.JavaScript.md
@@ -0,0 +1,18 @@
+# System.Runtime.InteropServices.JavaScript
+
+``` diff
+ namespace System.Runtime.InteropServices.JavaScript {
+ [CLSCompliantAttribute(false)]
+ [EditorBrowsableAttribute(EditorBrowsableState.Never)]
+ [SupportedOSPlatformAttribute("browser")]
+ public struct JSMarshalerArgument {
+- public delegate void ArgumentToJSCallback<T>(ref JSMarshalerArgument arg, T value);
++ [EditorBrowsableAttribute(EditorBrowsableState.Never)]
++ public delegate void ArgumentToJSCallback<T>(ref JSMarshalerArgument arg, T value);
+- public delegate void ArgumentToManagedCallback<T>(ref JSMarshalerArgument arg, out T value);
++ [EditorBrowsableAttribute(EditorBrowsableState.Never)]
++ public delegate void ArgumentToManagedCallback<T>(ref JSMarshalerArgument arg, out T value);
+ }
+ }
+```
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/Microsoft.WindowsDesktop.App/7.0-rc2.md b/release-notes/7.0/preview/api-diff/rc2/Microsoft.WindowsDesktop.App/7.0-rc2.md
new file mode 100644
index 00000000..331bd8ed
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/Microsoft.WindowsDesktop.App/7.0-rc2.md
@@ -0,0 +1,6 @@
+# API Difference 7.0-rc1 vs 7.0-rc2
+
+API listing follows standard diff formatting.
+Lines preceded by a '+' are additions and a '-' indicates removal.
+
+
diff --git a/release-notes/7.0/preview/api-diff/rc2/README.md b/release-notes/7.0/preview/api-diff/rc2/README.md
new file mode 100644
index 00000000..b3a3ed22
--- /dev/null
+++ b/release-notes/7.0/preview/api-diff/rc2/README.md
@@ -0,0 +1,7 @@
+# .NET 7.0 RC 2 API Changes
+
+The following API changes were made in .NET 7.0 RC 2:
+
+- [Microsoft.NETCore.App](./Microsoft.NETCore.App/7.0-rc2.md)
+- [Microsoft.AspNetCore.App](./Microsoft.AspNetCore.App/7.0-rc2.md)
+- [Microsoft.WindowsDesktop.App](./Microsoft.WindowsDesktop.App/7.0-rc2.md)
diff --git a/release-notes/7.0/supported-os.md b/release-notes/7.0/supported-os.md
index 9054aee7..3dfca5d2 100644
--- a/release-notes/7.0/supported-os.md
+++ b/release-notes/7.0/supported-os.md
@@ -1,8 +1,8 @@
# .NET 7 - Supported OS versions
-[.NET 7](README.md) [is supported](https://github.com/dotnet/core/blob/main/microsoft-support.md) on multiple operating systems per their [lifecycle policy](../../os-lifecycle-policy.md).
+[.NET 7](README.md) is a [Standard Term Support (STS)](../../release-policies.md) release and [is supported](../../microsoft-support.md) on multiple operating systems per their lifecycle policy.
-For issues with .NET on operating systems not listed here, please open a GitHub issue in the appropriate .NET repository or contact the OS maintainer community . Please see [.NET Repos](https://github.com/dotnet/core/blob/main/Documentation/core-repos.md) for the repository list.
+For issues with .NET on operating systems not listed here, please open a GitHub issue in the appropriate .NET repository or contact the OS maintainer community . See [.NET Repos](../../Documentation/core-repos.md) for the repository list.
## Windows
diff --git a/release-policies.md b/release-policies.md
index 7e195dd2..b222aee2 100644
--- a/release-policies.md
+++ b/release-policies.md
@@ -1,52 +1,50 @@
# Release Policies
-The .NET team uses the following policies for [.NET releases](releases.md). They define what you can expect when you use a given .NET release.
+The .NET team uses the following policies for [.NET releases](releases.md).
## Release cadence
-New major .NET versions are released annually in November. .NET 5.0 was the first version to be released according to this schedule. Minor releases may also be released, with no pre-defined or regular schedule.
+New major .NET versions are released annually in November, at [.NET Conf](https://www.dotnetconf.net/).
-## Release types
+Patch updates are released monthly on the second Tuesday of each month, also known as Patch Tuesday.
-Each .NET release is defined (prior to initial release) as either **Preview**, **Current**, or **Long Term Support (LTS)**. The difference is support time frame, as defined below:
+Minor versions of the .NET SDK are released approximately quarterly. These are known as [feature bands](https://learn.microsoft.com/dotnet/core/releases-and-support#feature-bands-sdk-only).
-* **Preview** releases are not supported but are offered for public testing. A Preview or Release Candidate release may be declared as "go live" by Microsoft and be supported in production.
-* **Current** releases are supported for (typically) eighteen months. They are intended for users that want to take advantage of the newest features and improvements and to stay on the leading edge of .NET innovation. Current release users need to upgrade to later .NET releases more often to stay in support.
-* **LTS** releases are supported for three years. They are intended for users that want the stability and lower cost of maintaining an application on a single (major.minor) .NET version for an extended period.
+## Release types
-LTS and Current releases have many similarities. The .NET team follows the same software engineering and release processes for both release types, including for security, compatibility, and reliability. Both releases may contain major new features and breaking changes. The .NET team aspires to enable straightforward migration from one release to another (LTS or Current, in either direction), and has processes in place to achieve that intention.
+Each .NET release is defined as either **Standard Term Support (STS)** or **Long Term Support (LTS)**, at the beginning of the release.
-## Servicing
+* **STS** releases are supported for eighteen months, released in even-numbered years. They are intended for users that want to take advantage of the newest features and improvements and to stay on the leading edge of .NET innovation.
+* **LTS** releases are supported for three years, released in odd-numbered years. They are intended for users that want the stability and lower cost of maintaining an application for an extended period, only needing to upgrade their .NET version for security patches.
-.NET releases are supported -- during the servicing period -- according to the following policies. Servicing policies are the same for LTS and Current releases.
+Note: **Standard Term Support** releases were previously called **Current**.
-A single "bug bar" is used to decide if a change is warranted and safe for servicing updates. A given fix is often applied to multiple [servicing branches](https://github.com/dotnet/core/blob/main/daily-builds.md#servicing-releases), independent of release type. Breaking changes are not accepted during servicing, except (in the very rare case) to resolve a security vulnerability.
+LTS and STS releases differ only by support duration. The .NET team follows the same software engineering and release processes for both release types, including for security, compatibility, and reliability. Both releases may contain major new features and breaking changes. The .NET team aspires to enable straightforward migration from one release to another, for both release types.
-Improvements are released as "patches". Patch releases are cumulative. Patches are released on the Microsoft "Patch Tuesday" (second Tuesday of each month), however there is no guarantee that there will be a .NET release on any given Patch Tuesday. Patches are announced on the [.NET blog](https://devblogs.microsoft.com/dotnet/). A digest of monthly releases is published to [dotnet/announcements](https://github.com/dotnet/announcements/labels/Monthly-Update).
+## Support phases
-### Full support
+.NET releases go through multiple support phases, with varying support levels.
-During the full support period, .NET releases are updated to improve functional capabilities and mitigate security vulnerabilities.
+* **Preview** releases are not supported but are offered for the community to test and give feedback.
+* **Go-Live** releases are supported by Microsoft in production. These are typically our release candidate builds, just before the Generally Available (GA) release.
+* **Active** support is provided for the majority of the period after a release is GA. Functional and security improvements will be provided, including support for new operating system versions.
+* **Maintenance** support is provided for the last six months of support. Improvements are limited to security fixes. Support for new operating system versions will be provided on a best-effort basis.
+* **End of life (EOL)** marks the end of support.
-Functional improvements are typically very targeted, and may address the following:
+[Support for various operating systems](os-lifecycle-policy.md) is defined for each release.
-* Resolve reported crashes.
-* Resolve severe performance issues.
-* Resolve functional bugs in mainline scenarios.
-* Add support for a new [operating system version](os-lifecycle-policy.md) or new hardware platform.
-
-### Maintenance support
+## Servicing
-During the maintenance support period, .NET releases are updated to mitigate security vulnerabilities, only.
+Improvements are released as full re-releases of the product, called "patch releases". Patch releases are cumulative. Patches are released on the Microsoft "Patch Tuesday" (second Tuesday of each month), however there is no guarantee that there will be a .NET release on any given Patch Tuesday.
-The maintenance support period is the final 6 months of support for any release (Current or LTS). After the maintenance period ends, the release is out of support.
+Patches are announced in [release notes](release-notes/README.md), on the [.NET blog](https://devblogs.microsoft.com/dotnet/category/maintenance-and-updates/), and [dotnet/announcements](https://github.com/dotnet/announcements/labels/Monthly-Update).
-### End of support
+Breaking changes are not accepted during servicing, except in the rare case to mitigate a security vulnerability or other critical issue.
-"End of support", "out of support", or "end of life" refers to the date after which fixes, updates, or technical assistance are no longer provided. As the end of support nears for a given .NET version, we recommend that you move to a newer .NET version, and reduce/remove your use of the given .NET version. After support ends, we recommend that you uninstall a given .NET version if you are no longer using it, or install the latest patch, and accelerate your plans to remove your use of that .NET version.
+## End of support
-Your use of out-of-support .NET versions may put your applications, application data, and computing environment at risk. You are strongly recommended to not use out-of-support software.
+As the end of support nears for a given .NET version, we strongly recommend you move to a newer, supported version of .NET. .NET releases that have reached end of support do not get security patches. Continuing to use an unsupported version will expose you to security vulnerabilities.
## Vendor support
-[Microsoft offers support](microsoft-support.md) for in-support releases. Updates are provided at [dotnet.microsoft.com](https://dotnet.microsoft.com/download/dotnet) and [Microsoft Update](https://devblogs.microsoft.com/dotnet/net-core-updates-coming-to-microsoft-update/).
+[Microsoft offers support](microsoft-support.md) for .NET releases, per these policies. Updates are provided at the [.NET Website](https://dotnet.microsoft.com/download/dotnet), [Microsoft Update](https://devblogs.microsoft.com/dotnet/net-core-updates-coming-to-microsoft-update/), [Linux Package Managers](https://docs.microsoft.com/dotnet/core/install/linux), and the [Microsoft Artifact Registry](https://mcr.microsoft.com/catalog?search=dotnet/).
diff --git a/releases.md b/releases.md
index 9f68a74a..5e7c68a7 100644
--- a/releases.md
+++ b/releases.md
@@ -1,8 +1,8 @@
# .NET Releases
-The .NET team releases new major versions of .NET annually, each November. Releases are either Long Term Support (LTS) or Current, the two .NET release types, and transition from full support, to maintenance and finally to end-of-life on a defined schedule, per [.NET release policies][policies]. .NET releases are [supported by Microsoft](microsoft-support.md) on [multiple operating systems](os-lifecycle-policy.md) and hardware architectures.
+The .NET team releases new major versions of .NET annually, each November. Releases are either Long Term Support (LTS) or Standard Term Support (STS), and transition from full support through to end-of-life on a defined schedule, per [.NET release policies][policies]. .NET releases are [supported by Microsoft](microsoft-support.md) on [multiple operating systems](os-lifecycle-policy.md) and hardware architectures.
-All .NET versions can be downloaded from the [.NET website](https://dotnet.microsoft.com/download/dotnet) or [.NET release notes](release-notes/README.md).
+All .NET versions can be downloaded from the [.NET Website](https://dotnet.microsoft.com/download/dotnet), [Linux Package Managers](https://docs.microsoft.com/dotnet/core/install/linux), and the [Microsoft Artifact Registry](https://mcr.microsoft.com/catalog?search=dotnet/).
## Supported .NET versions
@@ -24,11 +24,11 @@ The following table lists end-of-life releases.
| Version | Release Date | Support | Final Patch Version | End of Support |
| :-- | :-- | :-- | :-- | :-- |
-| [.NET 5](release-notes/5.0/README.md) | [November 10, 2020](https://devblogs.microsoft.com/dotnet/announcing-net-5-0/) | [Current][policies] | [5.0.17][5.0.17] | May 10, 2022 |
-| [.NET Core 3.0](release-notes/3.0/README.md) | [September 23, 2019](https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/) | [Current][policies] | [3.0.3][3.0.3] | [March 3, 2020](https://devblogs.microsoft.com/dotnet/net-core-3-0-end-of-life/) |
-| [.NET Core 2.2](release-notes/2.2/README.md) | [December 4th, 2018](https://devblogs.microsoft.com/dotnet/announcing-net-core-2-2/) | [Current][policies] | [2.2.8][2.2.8] | [December 23, 2019](https://devblogs.microsoft.com/dotnet/net-core-2-2-will-reach-end-of-life-on-december-23-2019/) |
+| [.NET 5](release-notes/5.0/README.md) | [November 10, 2020](https://devblogs.microsoft.com/dotnet/announcing-net-5-0/) | [STS][policies] | [5.0.17][5.0.17] | [May 10, 2022](https://devblogs.microsoft.com/dotnet/dotnet-5-end-of-support-update/) |
+| [.NET Core 3.0](release-notes/3.0/README.md) | [September 23, 2019](https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/) | [STS][policies] | [3.0.3][3.0.3] | [March 3, 2020](https://devblogs.microsoft.com/dotnet/net-core-3-0-end-of-life/) |
+| [.NET Core 2.2](release-notes/2.2/README.md) | [December 4th, 2018](https://devblogs.microsoft.com/dotnet/announcing-net-core-2-2/) | [STS][policies] | [2.2.8][2.2.8] | [December 23, 2019](https://devblogs.microsoft.com/dotnet/net-core-2-2-will-reach-end-of-life-on-december-23-2019/) |
| [.NET Core 2.1](release-notes/2.1/README.md) | [May 30, 2018](https://devblogs.microsoft.com/dotnet/announcing-net-core-2-1/) | [LTS][policies] | [2.1.30][2.1.30] | [August 21, 2021](https://devblogs.microsoft.com/dotnet/net-core-2-1-will-reach-end-of-support-on-august-21-2021/) |
-| [.NET Core 2.0](release-notes/2.0/README.md) | [August 14th, 2017](https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/) | [Current][policies] | [2.0.9][2.0.9] | [October 1, 2018](https://devblogs.microsoft.com/dotnet/net-core-2-0-will-reach-end-of-life-on-september-1-2018/) |
+| [.NET Core 2.0](release-notes/2.0/README.md) | [August 14th, 2017](https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/) | [STS][policies] | [2.0.9][2.0.9] | [October 1, 2018](https://devblogs.microsoft.com/dotnet/net-core-2-0-will-reach-end-of-life-on-september-1-2018/) |
| [.NET Core 1.1](release-notes/1.1/README.md) | [November 16th, 2016](https://devblogs.microsoft.com/dotnet/announcing-net-core-1-1/) | [LTS][policies] | [1.1.13][1.1.13] | [June 27, 2019](https://devblogs.microsoft.com/dotnet/net-core-1-0-and-1-1-will-reach-end-of-life-on-june-27-2019/) |
| [.NET Core 1.0](release-notes/1.0/README.md) | [June 27th, 2016](https://devblogs.microsoft.com/dotnet/announcing-net-core-1-0/) | [LTS][policies] | [1.0.16][1.0.16] | [June 27, 2019](https://devblogs.microsoft.com/dotnet/net-core-1-0-and-1-1-will-reach-end-of-life-on-june-27-2019/) |