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