From 07961a232f2340cfd24538b9476b4ec6b2e95757 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:23:13 +0000 Subject: [PATCH 1/5] Initial plan From 1fb4dc4cde6f844efb1850b476d40783d6e28d9f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:27:14 +0000 Subject: [PATCH 2/5] Add breaking change article: template engine packages no longer support netstandard2.0 --- docs/core/compatibility/11.md | 1 + .../sdk/11/template-engine-netstandard.md | 75 +++++++++++++++++++ docs/core/compatibility/toc.yml | 2 + 3 files changed, 78 insertions(+) create mode 100644 docs/core/compatibility/sdk/11/template-engine-netstandard.md diff --git a/docs/core/compatibility/11.md b/docs/core/compatibility/11.md index 5af441a8eaa52..06a806594ca69 100644 --- a/docs/core/compatibility/11.md +++ b/docs/core/compatibility/11.md @@ -89,4 +89,5 @@ See [Breaking changes in EF Core 11](/ef/core/what-is-new/ef-core-11.0/breaking- | Title | Type of change | |-------------------------------------------------------------------|-------------------| | [mono launch target not set for .NET Framework apps](sdk/11/mono-launch-target-removed.md) | Behavioral change | +| [Template engine packages no longer support netstandard2.0](sdk/11/template-engine-netstandard.md) | Binary/source incompatible | | [VSTest removes dependency on Newtonsoft.Json](sdk/11/vstest-removes-newtonsoft-json.md) | Binary/source incompatible | diff --git a/docs/core/compatibility/sdk/11/template-engine-netstandard.md b/docs/core/compatibility/sdk/11/template-engine-netstandard.md new file mode 100644 index 0000000000000..92b5bb5395b1f --- /dev/null +++ b/docs/core/compatibility/sdk/11/template-engine-netstandard.md @@ -0,0 +1,75 @@ +--- +title: "Breaking change: Template engine packages no longer support netstandard2.0" +description: "Learn about the breaking change in .NET 11 where the .NET SDK template engine NuGet packages dropped the netstandard2.0 target framework." +ms.date: 06/10/2026 +ai-usage: ai-assisted +--- + +# Template engine packages no longer support netstandard2.0 + +The .NET SDK template engine NuGet packages no longer target `netstandard2.0`. Projects that consumed these packages via the `netstandard2.0` target and don't target one of the remaining frameworks can no longer use them. + +## Version introduced + +.NET 11 Preview 4 + +## Previous behavior + +Previously, to support consumption from projects targeting .NET Standard 2.0 (including .NET Framework 4.6.1+ and .NET Core 2.0+), the following packages included a `netstandard2.0` target: + +- `Microsoft.TemplateEngine.Abstractions` +- `Microsoft.TemplateEngine.Core` +- `Microsoft.TemplateEngine.Core.Contracts` +- `Microsoft.TemplateEngine.Edge` +- `Microsoft.TemplateEngine.Orchestrator.RunnableProjects` +- `Microsoft.TemplateEngine.Utils` +- `Microsoft.TemplateEngine.IDE` +- `Microsoft.TemplateLocalizer.Core` + +## New behavior + +Starting in .NET 11, these packages only target `net9.0`, `net11.0`, and `net472`. Projects that previously consumed these packages via the `netstandard2.0` target and don't target one of these remaining frameworks can no longer reference these packages. + +## Type of breaking change + +This change can affect [source compatibility](../../categories.md#source-incompatible) and [binary compatibility](../../categories.md#binary-incompatible). + +## Reason for change + +NuGet dropped `netstandard` support starting with version 7.0. `Microsoft.TemplateEngine.Edge` depends on NuGet packages (`NuGet.Configuration`, `NuGet.Credentials`, and `NuGet.Protocol`), which made it increasingly difficult to maintain `netstandard2.0` compatibility. To avoid transitive dependency conflicts, the project had to pin these packages to older versions and disable `CentralPackageTransitivePinningEnabled`. Dropping `netstandard2.0` removes this constraint and allows the packages to stay current with their dependencies. + +For more context, see [dotnet/sdk#54041](https://github.com/dotnet/sdk/pull/54041). + +## Recommended action + +Update your consuming project to target `net9.0` or later, or `net472` or later (.NET Framework). If you relied on the `netstandard2.0` target to consume these packages from a .NET Standard class library, retarget that library to one of the supported frameworks. + +For example, change your project file from: + +```xml +netstandard2.0 +``` + +to one of the following: + +```xml +net9.0 +``` + +```xml +net472 +``` + +If you need to multi-target and keep `netstandard2.0` for other consumers, you can conditionally reference these packages only for the supported target frameworks: + +```xml +netstandard2.0;net9.0 + + + + +``` + +## Affected APIs + +All public APIs in the affected packages remain the same. Only the supported target frameworks have changed. diff --git a/docs/core/compatibility/toc.yml b/docs/core/compatibility/toc.yml index fd1c9c42fb72f..2fbe488fbbb8c 100644 --- a/docs/core/compatibility/toc.yml +++ b/docs/core/compatibility/toc.yml @@ -68,6 +68,8 @@ items: items: - name: mono launch target not set for .NET Framework apps href: sdk/11/mono-launch-target-removed.md + - name: Template engine packages no longer support netstandard2.0 + href: sdk/11/template-engine-netstandard.md - name: VSTest removes dependency on Newtonsoft.Json href: sdk/11/vstest-removes-newtonsoft-json.md - name: .NET 10 From 1734f1316ab932efde122a69f9bab1648d247c5a Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:29:06 -0700 Subject: [PATCH 3/5] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/core/compatibility/sdk/11/template-engine-netstandard.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/compatibility/sdk/11/template-engine-netstandard.md b/docs/core/compatibility/sdk/11/template-engine-netstandard.md index 92b5bb5395b1f..2042bbf60a912 100644 --- a/docs/core/compatibility/sdk/11/template-engine-netstandard.md +++ b/docs/core/compatibility/sdk/11/template-engine-netstandard.md @@ -32,11 +32,11 @@ Starting in .NET 11, these packages only target `net9.0`, `net11.0`, and `net472 ## Type of breaking change -This change can affect [source compatibility](../../categories.md#source-incompatible) and [binary compatibility](../../categories.md#binary-incompatible). +This change can affect [source compatibility](../../categories.md#source-compatibility) and [binary compatibility](../../categories.md#binary-compatibility). ## Reason for change -NuGet dropped `netstandard` support starting with version 7.0. `Microsoft.TemplateEngine.Edge` depends on NuGet packages (`NuGet.Configuration`, `NuGet.Credentials`, and `NuGet.Protocol`), which made it increasingly difficult to maintain `netstandard2.0` compatibility. To avoid transitive dependency conflicts, the project had to pin these packages to older versions and disable `CentralPackageTransitivePinningEnabled`. Dropping `netstandard2.0` removes this constraint and allows the packages to stay current with their dependencies. +NuGet client SDK packages (`NuGet.*`) stopped targeting `netstandard2.0` starting with version 7.0. `Microsoft.TemplateEngine.Edge` depends on NuGet packages (`NuGet.Configuration`, `NuGet.Credentials`, and `NuGet.Protocol`), which made it increasingly difficult to maintain `netstandard2.0` compatibility. To avoid transitive dependency conflicts, the project had to pin these packages to older versions and disable `CentralPackageTransitivePinningEnabled`. Dropping `netstandard2.0` removes this constraint and allows the packages to stay current with their dependencies. For more context, see [dotnet/sdk#54041](https://github.com/dotnet/sdk/pull/54041). From 8626e4b09c432edcfe37beb50b83045b6d36b040 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 10 Jun 2026 19:31:40 +0000 Subject: [PATCH 4/5] Address PR feedback: add NuGet.org links and remove XML code examples --- .../sdk/11/template-engine-netstandard.md | 42 ++++--------------- 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/docs/core/compatibility/sdk/11/template-engine-netstandard.md b/docs/core/compatibility/sdk/11/template-engine-netstandard.md index 2042bbf60a912..c0231c7098b5a 100644 --- a/docs/core/compatibility/sdk/11/template-engine-netstandard.md +++ b/docs/core/compatibility/sdk/11/template-engine-netstandard.md @@ -17,14 +17,14 @@ The .NET SDK template engine NuGet packages no longer target `netstandard2.0`. P Previously, to support consumption from projects targeting .NET Standard 2.0 (including .NET Framework 4.6.1+ and .NET Core 2.0+), the following packages included a `netstandard2.0` target: -- `Microsoft.TemplateEngine.Abstractions` -- `Microsoft.TemplateEngine.Core` -- `Microsoft.TemplateEngine.Core.Contracts` -- `Microsoft.TemplateEngine.Edge` -- `Microsoft.TemplateEngine.Orchestrator.RunnableProjects` -- `Microsoft.TemplateEngine.Utils` -- `Microsoft.TemplateEngine.IDE` -- `Microsoft.TemplateLocalizer.Core` +- [`Microsoft.TemplateEngine.Abstractions`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Abstractions) +- [`Microsoft.TemplateEngine.Core`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Core) +- [`Microsoft.TemplateEngine.Core.Contracts`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Core.Contracts) +- [`Microsoft.TemplateEngine.Edge`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Edge) +- [`Microsoft.TemplateEngine.Orchestrator.RunnableProjects`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Orchestrator.RunnableProjects) +- [`Microsoft.TemplateEngine.Utils`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Utils) +- [`Microsoft.TemplateEngine.IDE`](https://www.nuget.org/packages/Microsoft.TemplateEngine.IDE) +- [`Microsoft.TemplateLocalizer.Core`](https://www.nuget.org/packages/Microsoft.TemplateLocalizer.Core) ## New behavior @@ -44,32 +44,6 @@ For more context, see [dotnet/sdk#54041](https://github.com/dotnet/sdk/pull/5404 Update your consuming project to target `net9.0` or later, or `net472` or later (.NET Framework). If you relied on the `netstandard2.0` target to consume these packages from a .NET Standard class library, retarget that library to one of the supported frameworks. -For example, change your project file from: - -```xml -netstandard2.0 -``` - -to one of the following: - -```xml -net9.0 -``` - -```xml -net472 -``` - -If you need to multi-target and keep `netstandard2.0` for other consumers, you can conditionally reference these packages only for the supported target frameworks: - -```xml -netstandard2.0;net9.0 - - - - -``` - ## Affected APIs All public APIs in the affected packages remain the same. Only the supported target frameworks have changed. From e94e99f52ed25141d8451c8d67da3649884c07f1 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 11 Jun 2026 12:10:48 -0700 Subject: [PATCH 5/5] Apply suggestion from @gewarren --- docs/core/compatibility/sdk/11/template-engine-netstandard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/compatibility/sdk/11/template-engine-netstandard.md b/docs/core/compatibility/sdk/11/template-engine-netstandard.md index c0231c7098b5a..b3936686b1f7c 100644 --- a/docs/core/compatibility/sdk/11/template-engine-netstandard.md +++ b/docs/core/compatibility/sdk/11/template-engine-netstandard.md @@ -24,7 +24,7 @@ Previously, to support consumption from projects targeting .NET Standard 2.0 (in - [`Microsoft.TemplateEngine.Orchestrator.RunnableProjects`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Orchestrator.RunnableProjects) - [`Microsoft.TemplateEngine.Utils`](https://www.nuget.org/packages/Microsoft.TemplateEngine.Utils) - [`Microsoft.TemplateEngine.IDE`](https://www.nuget.org/packages/Microsoft.TemplateEngine.IDE) -- [`Microsoft.TemplateLocalizer.Core`](https://www.nuget.org/packages/Microsoft.TemplateLocalizer.Core) +- [`Microsoft.TemplateLocalizer.Core`](https://www.nuget.org/packages/Microsoft.TemplateEngine.TemplateLocalizer.Core) ## New behavior