Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas
, '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

Enable runtime-async in CoreCLR System.Private.CoreLib - #126594

Merged
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib
Apr 8, 2026
Merged

Enable runtime-async in CoreCLR System.Private.CoreLib#126594
agocke merged 5 commits into
mainfrom
copilot/enable-runtime-async-corelib

Conversation

CopilotAI commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

Description

Runtime-async was enabled for src/libraries (non-mobile/wasm) but was missing from the CoreCLR System.Private.CoreLib. This adds the runtime-async=on feature flag to src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj, matching the existing NativeAOT pattern with architecture and runtime flavor exclusions:

<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64' and '$(RuntimeFlavor)' != 'Mono'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

…scv64, loongarch64, and Mono
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/46f839bd-54df-446d-8b31-41b32d813c8c
Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enables the Roslyn runtime-async=on feature flag when building CoreCLR’s System.Private.CoreLib, aligning CoreCLR CoreLib behavior with existing runtime-async enablement elsewhere while excluding known-unsupported architectures and Mono builds.

Changes:

  • Add runtime-async=on to Features for CoreCLR System.Private.CoreLib builds.
  • Gate the feature behind MSBuild conditions to exclude riscv64, loongarch64, and RuntimeFlavor=Mono.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Hopefully no surprises when tests get to run.

@agocke
agocke enabled auto-merge (squash) April 7, 2026 02:03
Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
@github-actions

This comment has been minimized.

@hez2010

hez2010 commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Are we still in the window of preview3 so that this can be backported to it?

CopilotAI review requested due to automatic review settings April 7, 2026 16:41

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
@github-actions

This comment has been minimized.

Comment threadsrc/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj Outdated
CopilotAI review requested due to automatic review settings April 8, 2026 05:48

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #126594

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: Justified. Runtime-async (runtime-async=on) is already enabled for libraries (src/libraries/Directory.Build.targets), NativeAOT System.Private.CoreLib, and test projects — CoreCLR's System.Private.CoreLib was the remaining gap. Closing that gap is the right thing to do.

Approach: The intent is correct but the latest commit (9865b9d, co-authored with @am11) introduced an unintended behavioral change. When the architecture-conditional PropertyGroup was deleted and the <Features> line was kept, it became part of the adjacent Configuration == Release PropertyGroup — restricting runtime-async=on to Release builds only. This is almost certainly unintentional.

Summary: ⚠️ Needs Changes. The core idea is sound, but the latest commit accidentally restricts runtime-async to Release configuration only, which is inconsistent with every other place the flag is set. Additionally, the NativeAOT SPCL still has the riscv64/loongarch64 exclusions that @am11 says are now resolved — creating an inconsistency between the two CoreLib projects.


Detailed Findings

❌ Configuration Restriction — runtime-async=on is now Release-only

The <Features>$(Features);runtime-async=on</Features> line now lives inside the Configuration == Release PropertyGroup (lines 86-89 of the current csproj):

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

This means Debug and Checked builds will NOT have runtime-async enabled for CoreCLR SPCL. This is inconsistent with:

LocationConfiguration restriction?
NativeAOT SPCL (src/coreclr/nativeaot/.../System.Private.CoreLib.csproj:48-49)None — all configurations
Libraries (src/libraries/Directory.Build.targets:140-145)None — all configurations
Tests (eng/testing/tests.targets:12-15)None — all configurations
CoreCLR SPCL (this PR)Release only

This appears to be an unintended side effect of applying @am11's suggestion to delete the architecture-conditional PropertyGroup. The deletion removed the </PropertyGroup> that closed the Release group and the <PropertyGroup Condition="..."> that opened the feature group — merging the <Features> line into the Release block.

Fix: Move <Features> into its own unconditional PropertyGroup, or add it to the existing unconditional PropertyGroup that follows:

<PropertyGroupCondition="'$(Configuration)' == 'Release'">
<OptimizeCondition="'$(Optimize)' == ''">true</Optimize>
</PropertyGroup>
<PropertyGroup>
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

⚠️ NativeAOT SPCL Inconsistency — still has riscv64/loongarch64 exclusions

If the riscv64 and loongarch64 runtime-async support is indeed complete (per @am11's review comment citing merged PRs #125446 and #125114), then the same exclusion removal should also be applied to the NativeAOT SPCL at src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj (lines 45-50), which still has:

<!-- Enable runtime async for Native AOT --><!-- RISC-V: https://github.com/dotnet/runtime/issues/124934 --><!-- LoongArch: https://github.com/dotnet/runtime/issues/124935 -->
<PropertyGroupCondition="'$(TargetArchitecture)' != 'riscv64' and '$(TargetArchitecture)' != 'loongarch64'">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Without updating NativeAOT SPCL, we end up with:

  • CoreCLR SPCL: runtime-async on all architectures
  • NativeAOT SPCL: runtime-async on all except riscv64/loongarch64

Note: tracking issues #124934 and #124935 are still open with unchecked items (including NativeAOT support). If the architecture work is not fully complete for NativeAOT, this inconsistency may be intentional — but it should be explicitly noted. Either way, the CoreCLR SPCL change should be made consistently with the NativeAOT SPCL.

⚠️ Stale Approval — VSadov's LGTM was on commit 1

@VSadov approved on the initial commit (c096559) which had Mono and architecture exclusions. The code has changed substantially since then (Mono exclusion removed per @MichalStrehovsky's feedback, architecture exclusions removed per @am11's feedback, and the unintended Release-only restriction). The current code is meaningfully different from what was approved.

💡 PR Description — Stale

The PR description still shows the original PropertyGroup with RuntimeFlavor != 'Mono' and architecture exclusions, and lists "riscv64 excluded" / "loongarch64 excluded" / "Mono flavor excluded" as features. None of these reflect the current state of the code. Consider updating.


Generated by Copilot Code Review workflow for PR #126594

Generated by Code Review for issue #126594 ·

@agocke

Copy link
Copy Markdown
Member

/ba-g failures are networking

@agocke
agocke disabled auto-merge April 8, 2026 16:48
@agocke
agocke merged commit 714d206 into mainApr 8, 2026
111 of 115 checks passed
@agocke
agocke deleted the copilot/enable-runtime-async-corelib branch April 8, 2026 16:49
@agocke

Copy link
Copy Markdown
Member

/backport to release/11.0-preview3

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/11.0-preview3 (link to workflow run)

wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wtgodbe added a commit to dotnet/aspnetcore that referenced this pull request Apr 15, 2026
* Backflow from https://github.com/dotnet/dotnet / 0cf6b19 build 309569
[[ commit created by automation ]]
* Update dependencies from build 309569
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26203.108 -> 11.0.0-preview.4.26208.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26203.108 -> 11.0.0-beta.26208.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26203.108 -> 3.3.0-preview.4.26208.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20408 -> 7.6.0-rc.20910)
[[ commit created by automation ]]
* Add feed back into NuGet.config
* Backflow from https://github.com/dotnet/dotnet / 5bed449 build 309901
[[ commit created by automation ]]
* Update dependencies from build 309901
Updated Dependencies:
Microsoft.NET.Runtime.WebAssembly.Sdk, Microsoft.NETCore.BrowserDebugHost.Transport, Microsoft.NET.Runtime.MonoAOTCompiler.Task, dotnet-ef, Microsoft.Bcl.AsyncInterfaces, Microsoft.Bcl.TimeProvider, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design, Microsoft.EntityFrameworkCore.InMemory, Microsoft.EntityFrameworkCore.Relational, Microsoft.EntityFrameworkCore.Sqlite, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Tools, Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.Binder, Microsoft.Extensions.Configuration.CommandLine, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.FileExtensions, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.Configuration.UserSecrets, Microsoft.Extensions.Configuration.Xml, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Diagnostics, Microsoft.Extensions.Diagnostics.Abstractions, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Composite, Microsoft.Extensions.FileProviders.Physical, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Hosting, Microsoft.Extensions.Hosting.Abstractions, Microsoft.Extensions.Http, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Configuration, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.Logging.Debug, Microsoft.Extensions.Logging.EventLog, Microsoft.Extensions.Logging.EventSource, Microsoft.Extensions.Logging.TraceSource, Microsoft.Extensions.Options, Microsoft.Extensions.Options.ConfigurationExtensions, Microsoft.Extensions.Options.DataAnnotations, Microsoft.Extensions.Primitives, Microsoft.Internal.Runtime.AspNetCore.Transport, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Collections.Immutable, System.Composition, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Diagnostics.EventLog, System.Diagnostics.PerformanceCounter, System.DirectoryServices.Protocols, System.Formats.Asn1, System.Formats.Cbor, System.IO.Hashing, System.IO.Pipelines, System.Memory.Data, System.Net.Http.Json, System.Net.Http.WinHttpHandler, System.Net.ServerSentEvents, System.Numerics.Tensors, System.Reflection.Metadata, System.Resources.Extensions, System.Runtime.Caching, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encodings.Web, System.Text.Json, System.Threading.AccessControl, System.Threading.Channels, System.Threading.RateLimiting (Version 11.0.0-preview.4.26208.110 -> 11.0.0-preview.4.26210.110)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk (Version 11.0.0-beta.26208.110 -> 11.0.0-beta.26210.110)
Microsoft.Web.Xdt (Version 3.3.0-preview.4.26208.110 -> 3.3.0-preview.4.26210.110)
NuGet.Frameworks, NuGet.Packaging, NuGet.Versioning (Version 7.6.0-rc.20910 -> 7.6.0-rc.21110)
[[ commit created by automation ]]
* Add back package source for dotnet-extensions
* Remove DownloadFile task from RepoTasks
Removed the DownloadFile task from RepoTasks.
* Add quarantined test for AuthHeaderEnvironmentVariableRemoved
* Quarantine IIS NewShim StartupTests failing due to runtime-async
All 18 StartupTests methods in IIS.NewShim.FunctionalTests are
failing after runtime-async was enabled unconditionally in CoreCLR
(dotnet/runtime#126680, dotnet/runtime#126594). The tests return
HTTP 500 even though the app starts successfully in-process.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine IIS NewShim StartupTests only (not other IIS variants)
Only the NewShim variants of StartupTests are failing after
runtime-async was enabled in CoreCLR. Use a partial class to
apply [QuarantinedTest] only to the NewShim assembly, leaving
the IIS, IISExpress, and NewHandler variants unaffected.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use #if NEWSHIM_FUNCTIONALS instead of partial class for quarantine
Simpler approach: conditionally apply [QuarantinedTest] using the
existing NEWSHIM_FUNCTIONALS define constant instead of adding a
partial class and a new file. No new files needed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine ShutdownTests.OutOfProcessToInProcessHostingModelSwitchWorks for NewShim
This test hangs in the NewShim variant, blocking the entire work
item. Same runtime-async root cause as the StartupTests failures.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine entire ShutdownTests class for NewShim
Multiple ShutdownTests methods are failing/hanging in the NewShim
variant. Move to class-level quarantine instead of individual
method quarantine.
Tracking issue: dotnet/runtime#126925
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
Co-authored-by: wigodbe <wigodbe@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.

8 participants

@hez2010@agocke@am11@VSadov@MichalStrehovsky@jkotas