Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/core/compatibility/8.0.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,11 +50,13 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [FileStream writes when pipe is closed](core-libraries/8.0/filestream-disposed-pipe.md) | Behavioral change | Preview 1 |
| [GC.GetGeneration might return Int32.MaxValue](core-libraries/8.0/getgeneration-return-value.md) | Behavioral change | Preview 4 |
| [GetFolderPath behavior on Unix](core-libraries/8.0/getfolderpath-unix.md) | Behavioral change | Preview 1 |
| [GetSystemVersion no longer returns ImageRuntimeVersion](core-libraries/8.0/getsystemversion.md) | Behavioral change | RC 1 |
| [IndexOfAnyValues renamed to SearchValues](core-libraries/8.0/indexofanyvalues-renamed.md) | Source/binary incompatible | Preview 5 |
| [ITypeDescriptorContext nullable annotations](core-libraries/8.0/itypedescriptorcontext-props.md) | Source incompatible | Preview 1 |
| [Legacy Console.ReadKey removed](core-libraries/8.0/console-readkey-legacy.md) | Behavioral change | Preview 1 |
| [Method builders generate parameters with HasDefaultValue set to false](core-libraries/8.0/parameterinfo-hasdefaultvalue.md) | Behavioral change | Preview 5 |
| [Removed overloads of ToFrozenDictionary/ToFrozenSet](core-libraries/8.0/optimizeforreading-arg.md) | Source/binary incompatible | Preview 7 |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change | RC 1 |

## Cryptography

Expand Down
47 changes: 47 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/getsystemversion.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
---
title: ".NET 8 breaking change: GetSystemVersion no longer returns ImageRuntimeVersion"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeEnvironment.GetSystemVersion no longer returns ImageRuntimeVersion, which is a .NET Framework-oriented value.
ms.date: 09/06/2023
---
# GetSystemVersion no longer returns ImageRuntimeVersion

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> no longer returns <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is a .NET Framework-oriented value. It's been updated to return a more relevant value, however, the historical leading `v` has been maintained.

## Previous behavior

<xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returned <xref:System.Reflection.Assembly.ImageRuntimeVersion?displayProperty=nameWithType>, which is an indicator of .NET Framework in-place replacement, not a product release.

Example: `v4.0.30319`

## New behavior

Starting in .NET 8, <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=nameWithType> returns `"v"` concatenated with <xref:System.Environment.Version?displayProperty=nameWithType>, which is the version of the CLR.

Example: `v8.0.0`

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

The existing version wasn't useful or meaningful for .NET.

## Recommended action

Update your code to expect the new version, or use `typeof(object).Assembly.ImageRuntimeVersion` instead.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion?displayProperty=fullName>

## See also

The following changes are related:

- [Improved .NET Core version APIs](../../../whats-new/dotnet-core-3-0.md#improved-net-core-version-apis)
- [FrameworkDescription's value is .NET instead of .NET Core](../5.0/frameworkdescription-returns-net-not-net-core.md)
41 changes: 41 additions & 0 deletions docs/core/compatibility/core-libraries/8.0/runtimeidentifier.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
---
title: ".NET 8 breaking change: RuntimeIdentifier returns platform for which the runtime was built"
description: Learn about the .NET 8 breaking change in core .NET libraries where RuntimeInformation.RuntimeIdentifier returns the platform for which the runtime was built.
ms.date: 09/06/2023
---
# RuntimeIdentifier returns platform for which the runtime was built

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> returns the platform for which the runtime was built, rather than a value computed at run time.

## Previous behavior

The value was a runtime identifier (RID) computed via OS files or APIs. This generally meant it was a version-specific and distro-specific RID. For example, when running an application on Windows 11, the value was `win10-x64` or, on Ubuntu 20.04, it could be `ubuntu.20.04-x64`.

## New behavior

Starting in .NET 8, the value is the RID for which the runtime was built. This means that for portable builds of the runtime (all Microsoft-provided builds), the value is non-version-specific and non-distro-specific. For example, the value on Windows 11 is `win-x64`, and on Ubuntu 20.04, it's `linux-x64`. For non-portable builds (source-build), the build sets a build RID that can have a version and distro, and that value is the RID that's returned.

## Version introduced

.NET 8 RC 1

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is in line with a .NET 8 change to [RID-specific asset resolution](../../deployment/8.0/rid-asset-list.md) and the move away from a distro-aware runtime. <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value that should represent the platform on which the host or runtime considers itself to be running. In .NET 8, that corresponds to the platform for which the host or runtime is built, rather than an RID computed at run time.

## Recommended action

<xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=nameWithType> is an opaque value and not intended to be parsed into its component parts. For the OS version of the actual machine an application is running on, use <xref:System.Environment.OSVersion?displayProperty=nameWithType>. For a description, use <xref:System.Runtime.InteropServices.RuntimeInformation.OSDescription?displayProperty=nameWithType>. For a specific ID (distro) and corresponding version on Linux, you can read the [os-release](https://www.freedesktop.org/software/systemd/man/os-release.html) file.

## Affected APIs

- <xref:System.Runtime.InteropServices.RuntimeInformation.RuntimeIdentifier?displayProperty=fullName>

## See also

- [.NET SDK uses a smaller RID graph](../../sdk/8.0/rid-graph.md)
- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
1 change: 1 addition & 0 deletions docs/core/compatibility/sdk/8.0/rid-graph.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,3 +36,4 @@ If you need to revert to the previous behavior of using the old, full RID graph,
## See also

- [Host determines RID-specific assets](../../deployment/8.0/rid-asset-list.md)
- [RuntimeIdentifier returns platform for which the runtime was built](../../core-libraries/8.0/runtimeidentifier.md)
8 changes: 8 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -66,6 +68,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: Cryptography
items:
- name: AesGcm authentication tag size on macOS
Expand DownExpand Up@@ -1088,6 +1092,8 @@ items:
href: core-libraries/8.0/getgeneration-return-value.md
- name: GetFolderPath behavior on Unix
href: core-libraries/8.0/getfolderpath-unix.md
- name: GetSystemVersion no longer returns ImageRuntimeVersion
href: core-libraries/8.0/getsystemversion.md
- name: IndexOfAnyValues renamed to SearchValues
href: core-libraries/8.0/indexofanyvalues-renamed.md
- name: ITypeDescriptorContext nullable annotations
Expand All@@ -1098,6 +1104,8 @@ items:
href: core-libraries/8.0/parameterinfo-hasdefaultvalue.md
- name: Removed overloads of ToFrozenDictionary/ToFrozenSet
href: core-libraries/8.0/optimizeforreading-arg.md
- name: RuntimeIdentifier returns platform for which runtime was built
href: core-libraries/8.0/runtimeidentifier.md
- name: .NET 7
items:
- name: API obsoletions with default diagnostic ID
Expand Down