Skip to content

Commit

Permalink
Add default RID breaking change for .NET Framework targets (#43879)
Browse files Browse the repository at this point in the history
  • Loading branch information
gewarren authored Jan 6, 2025
1 parent a8c1705 commit bdae2ee
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/core/compatibility/9.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ If you're migrating an app to .NET 9, the breaking changes listed here might aff
| [`dotnet watch` incompatible with Hot Reload for old frameworks](sdk/9.0/dotnet-watch.md) | Behavioral change | RC 1 |
| [`dotnet workload` commands output change](sdk/9.0/dotnet-workload-output.md) | Behavioral change | Preview 1 |
| [`installer` repo version no longer documented](sdk/9.0/productcommits-versions.md) | Behavioral change | Preview 5 |
| [New default RID used when targeting .NET Framework](sdk/9.0/default-rid.md) | Source incompatible | GA |
| [Terminal logger is default](sdk/9.0/terminal-logger.md) | Behavioral change | Preview 1 |
| [Version requirements for .NET 9 SDK](sdk/9.0/version-requirements.md) | Source incompatible | GA |
| [Warning emitted for .NET Standard 1.x target](sdk/9.0/netstandard-warning.md) | Source incompatible | Preview 6 |
Expand Down
65 changes: 65 additions & 0 deletions docs/core/compatibility/sdk/9.0/default-rid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
title: "Default RID used when targeting .NET Framework"
description: "Learn about the breaking change in the .NET 9 SDK where a new default RID is used for apps that target .NET Framework."
ms.date: 12/5/2024
ai-usage: ai-assisted
ms.custom: https://github.com/dotnet/docs/issues/43692
---

# Default RID used when targeting .NET Framework

In .NET 8, a change was introduced to [use a smaller runtime identifier (RID) graph](../8.0/rid-graph.md) when targeting `net8.0` and later versions.

However, this broke customers who multi-target .NET and .NET Framework. That's because the restore happens once, but the .NET Framework project tries to use the old RID default and the .NET (Core) project tries to use the new reduced RID graph.

To enable this multi-targeting scenario, a default RID that's compatible with the new RID graph is now used in this scenario.

## Version introduced

.NET 9 GA

## Previous behavior

SDK-style projects that targeted .NET Framework with no RID set defaulted to `win7-x86` or `win7-x64`.

## New behavior

SDK-style projects that target .NET Framework with no RID set default to `win-x86` or `win-x64`.

## Type of breaking change

This change can affect [source compatibility](../../categories.md#source-compatibility).

## Reason for change

.NET Framework applications were getting a default RID that was incompatible with the portable RID graph. That incompatibility resulted in a restore error:

> Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266,5): error NETSDK1047: Assets file 'D:\1\s\artifacts\obj\MSBuild\project.assets.json' doesn't have a target for 'net472/win7-x64'. Ensure that restore has run and that you have included 'net472' in the TargetFrameworks for your project. You may also need to include 'win7-x64' in your project's RuntimeIdentifiers. \[MSBuild.csproj::TargetFramework=net472]>
For more information, see [dotnet/sdk issue #35575](https://github.com/dotnet/sdk/issues/35575).

## Recommended action

If you're affected by this change, choose one of the following actions:

- Update your runtime identifier to a value supported by the portable RID graph. Project file example:

```xml
<PropertyGroup>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
```

If you specify the RID as a command-line argument, make a similar change. For example, `dotnet publish --runtime win-x64`.

- Switch back to the old RID graph by setting `UseRidGraph` to `true` in the project file:

```xml
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>
```

## Affected APIs

None.
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ items:
items:
- name: Deprecated desktop Windows/macOS/Linux MonoVM runtime packages
href: deployment/9.0/monovm-packages.md
- name: Entity Framework Core
href: /ef/core/what-is-new/ef-core-9.0/breaking-changes?toc=/dotnet/core/compatibility/toc.json&bc=/dotnet/breadcrumb/toc.json
- name: Interop
items:
- name: CET supported by default
Expand Down Expand Up @@ -110,6 +112,8 @@ items:
href: sdk/9.0/dotnet-workload-output.md
- name: "`installer` repo version no longer documented"
href: sdk/9.0/productcommits-versions.md
- name: New default RID used when targeting .NET Framework
href: sdk/9.0/default-rid.md
- name: Terminal logger is default
href: sdk/9.0/terminal-logger.md
- name: Version requirements
Expand Down Expand Up @@ -1604,6 +1608,8 @@ items:
href: deployment/7.0/x86-host-path.md
- name: Entity Framework Core
items:
- name: EF Core 9
href: /ef/core/what-is-new/ef-core-9.0/breaking-changes?toc=/dotnet/core/compatibility/toc.json&bc=/dotnet/breadcrumb/toc.json
- name: EF Core 8
href: /ef/core/what-is-new/ef-core-8.0/breaking-changes?toc=/dotnet/core/compatibility/toc.json&bc=/dotnet/breadcrumb/toc.json
- name: EF Core 7
Expand Down Expand Up @@ -1810,6 +1816,8 @@ items:
href: sdk/9.0/dotnet-workload-output.md
- name: "`installer` repo version no longer documented"
href: sdk/9.0/productcommits-versions.md
- name: New default RID used when targeting .NET Framework
href: sdk/9.0/default-rid.md
- name: Terminal logger is default
href: sdk/9.0/terminal-logger.md
- name: Version requirements for .NET 9 SDK
Expand Down

0 comments on commit bdae2ee

Please sign in to comment.