Skip to content

Conversation

@DeagleGross
Copy link
Member

@DeagleGross DeagleGross commented Sep 17, 2025

Description

Backport of #63652 to net9.0

A change (#61894) improved algorithm to determine the architecture of a binary by switching away from GetBinaryTypeW (which seems to load the exe into executable space which might trigger custom windows policies). It was backported to net9.0: #62038.

However, we spotted that sometimes function incorrectly chooses a binary of an incompatible architecture, resulting in crashing site load.

Current change specifically checks for a full compatibility of bitness and architecture.

Fixes #63650

Customer Impact

For example users hosting x86 app on x64 machine / x64 app on arm64 machine are impacted unless current change is merged and used.

Regression?

  • Yes
  • No

Risk

  • High
  • Medium
  • Low

Impacts users who are using different process architecture then what where.exe outputs trying to find dotnet binary. It takes OS / process / dotnet arch installed combination to affect the behavior.

Verification

  • Manual (required)
  • Automated

Packaging changes reviewed?

  • Yes
  • No
  • N/A

Copilot AI review requested due to automatic review settings September 17, 2025 18:26
@dotnet-policy-service dotnet-policy-service bot added this to the 9.0.x milestone Sep 17, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR backports a fix for runtime architecture detection logic in the ASP.NET Core Module (ANCM) to .NET 9.0. The changes replace the previous boolean-based x64 detection with a more comprehensive processor architecture system that supports x86, AMD64, and ARM64 architectures.

  • Introduces a new ProcessorArchitecture enum to handle multiple architecture types instead of just x64/x86
  • Replaces runtime PE header magic number detection with compile-time architecture detection
  • Updates architecture matching logic to use the new enum-based system for finding compatible dotnet.exe instances

Reviewed Changes

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

Show a summary per file
File Description
ProcessorArchitecture.h New header defining ProcessorArchitecture enum and string conversion utility
HostFxrResolver.h Updates method signature from IsX64 to GetFileProcessorArchitecture
HostFxrResolver.cpp Refactors architecture detection logic and improves PE header parsing
Environment.h Adds GetCurrentProcessArchitecture method declaration
Environment.cpp Implements compile-time architecture detection using preprocessor macros

#elif defined(_M_IX86)
return ProcessorArchitecture::x86;
#else
static_assert(false, "Unknown target architecture");
Copy link

Copilot AI Sep 17, 2025

Choose a reason for hiding this comment

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

Use static_assert(false) with a dependent type to avoid immediate compilation failure. Consider using static_assert(sizeof(void*) == 0, ...) or a template-dependent expression to ensure this only triggers when the code path is actually instantiated.

Suggested change
static_assert(false, "Unknown target architecture");
static_assert(sizeof(void*) == 0, "Unknown target architecture");

Copilot uses AI. Check for mistakes.
@danmoseley danmoseley added the Servicing-consider Shiproom approval is required for the issue label Sep 17, 2025
@danmoseley
Copy link
Member

Please send the usual mail to tactics.

@danmoseley danmoseley added Servicing-approved Shiproom has approved the issue and removed Servicing-consider Shiproom approval is required for the issue labels Sep 19, 2025
@joperezr joperezr merged commit e820f58 into release/9.0 Sep 19, 2025
25 checks passed
@joperezr joperezr deleted the dmkorolev/9.0/acnm_arch branch September 19, 2025 21:55
@dotnet-policy-service dotnet-policy-service bot modified the milestones: 9.0.x, 9.0.10 Sep 19, 2025
This was referenced Oct 14, 2025
github-actions bot pushed a commit to saan800/saansoft-correlationid that referenced this pull request Dec 31, 2025
….Extensions.Logging.Abstractions (#178)

Updated
[Microsoft.AspNetCore.TestHost](https://github.com/dotnet/aspnetcore)
from 9.0.9 to 9.0.11.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.TestHost's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 9.0.11

[Release](https://github.com/dotnet/core/releases/tag/v9.0.11)

## What's Changed
* Update branding to 9.0.11 by @​vseanreesermsft in
dotnet/aspnetcore#63950
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63677
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63678
* [release/9.0] (deps): Bump src/submodules/googletest from `eb2d85e` to
`9706f75` by @​dependabot[bot] in
dotnet/aspnetcore#63894
* [release/9.0] Fixed devtools url used for debug with chrome and edge
by @​github-actions[bot] in
dotnet/aspnetcore#61948
* [release/9.0] (http2): Lower WINDOWS_UPDATE received on (half)closed
stream to stream abortion by @​DeagleGross in
dotnet/aspnetcore#63934
* [release/9.0] Re-quarantine
ServerRoutingTest.NavigationLock_OverlappingNavigationsCancelExistingNavigations_HistoryNavigation
by @​github-actions[bot] in
dotnet/aspnetcore#63956
* [release/9.0] Fix nginx install on mac, linux by @​wtgodbe in
dotnet/aspnetcore#63966
* [Hot Reload] Do not attempt to apply empty deltas. by @​tmat in
dotnet/aspnetcore#63979
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/aspnetcore#64036
* Revert log level severity for unknown proxy in
ForwardedHeadersMiddleware by @​BrennanConroy in
dotnet/aspnetcore#64091
* Set timeoutInMinutes to 0 for Windows build job by @​vseanreesermsft
in dotnet/aspnetcore#64126


**Full Changelog**:
dotnet/aspnetcore@v9.0.10...v9.0.11

## 9.0.10

[Release](https://github.com/dotnet/core/releases/tag/v9.0.10)

## What's Changed
* Update branding to 9.0.10 by @​vseanreesermsft in
dotnet/aspnetcore#63510
* [9.0] Make duplicate deb/rpm packages so we can sign them with the new
PMC key by @​jkoritzinsky in
dotnet/aspnetcore#63249
* [release/9.0] Extend Unofficial 1ES template in IdentityModel nightly
tests job by @​github-actions[bot] in
dotnet/aspnetcore#63465
* [release/9.0] (deps): Bump src/submodules/googletest from `373af2e` to
`eb2d85e` by @​dependabot[bot] in
dotnet/aspnetcore#63501
* [release/9.0] Quarantine ResponseBody_WriteContentLength_PassedThrough
by @​wtgodbe in dotnet/aspnetcore#63533
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63304
* [release/9.0] [OpenAPI] Use invariant culture for TextWriter by
@​martincostello in dotnet/aspnetcore#62239
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63303
* Unquarantine `RadioButtonGetsResetAfterSubmittingEnhancedForm` by
@​ilonatommy in dotnet/aspnetcore#63556
* [release/9.0] Update dependencies from dotnet/extensions by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63577
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/aspnetcore#63604
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#63648
* backport(9.0): Fix runtime architecture detection logic in ANCM. by
@​DeagleGross in dotnet/aspnetcore#63707


**Full Changelog**:
dotnet/aspnetcore@v9.0.9...v9.0.10

Commits viewable in [compare
view](dotnet/aspnetcore@v9.0.9...v9.0.11).
</details>

Updated
[Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime)
from 9.0.9 to 9.0.11.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Logging.Abstractions's
releases](https://github.com/dotnet/runtime/releases)._

## 9.0.11

[Release](https://github.com/dotnet/core/releases/tag/v9.0.11)

## What's Changed
* [release/9.0-staging] Fix DefaultIfEmptyIterator.TryGetElementAt
returning default value for out-of-bounds indices by
@​github-actions[bot] in dotnet/runtime#119844
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119981
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#119978
* [release/9.0-staging] Add acquire barrier to populate bit reading by
@​github-actions[bot] in dotnet/runtime#119967
* [release/9.0-staging] Bump System.Text.Json toolset version by
@​github-actions[bot] in dotnet/runtime#113385
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120034
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120033
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#120020
* [release/9.0-staging] `UnsafeAccessor` - ambiguous name and signature
match by @​AaronRobinsonMSFT in
dotnet/runtime#120011
* [release/9.0] Bump OSX.12 helix queues to OSX.13 by @​steveisok in
dotnet/runtime#119814
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120128
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120129
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#120106
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#120057
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120240
* [release/9.0] [mono] Make the compressed interface bitmap feature
usable by @​BrzVlad in dotnet/runtime#120154
* [release/9.0-staging] Remove an STJ deep nested object test causing
occasional failures by @​github-actions[bot] in
dotnet/runtime#120265
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#120331
* [release/9.0-staging] Detect if RSA-384 is supported on the platform
by @​vcsjones in dotnet/runtime#120382
* [release/9.0-staging] Load Standalone GC correctly in component
scenarios. by @​github-actions[bot] in
dotnet/runtime#120236
* [release/9.0-staging] [mono][hotreload] Make the runtime ignore an
update if it is an empty one by @​github-actions[bot] in
dotnet/runtime#120335
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#120349
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120397
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#120418
* [release/9.0-staging] Update dependencies from dotnet/xharness by
@​dotnet-maestro[bot] in dotnet/runtime#120425
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#120404
* [release/9.0-staging] Prevent format injection in hosting Windows PAL
printf functions when redirected to file by @​jkoritzinsky in
dotnet/runtime#119786
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#120417
* Update branding to 9.0.11 by @​vseanreesermsft in
dotnet/runtime#120474
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#120586
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120409
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120396
* [release/9.0-staging] [mono][interp] Fix various leaks, primarily
around dynamic methods by @​BrzVlad in
dotnet/runtime#120600
* [release/9.0-staging] [mono][sgen] Fix incorrect condition when
checking if we should do a major collection by @​github-actions[bot] in
dotnet/runtime#120533
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#120570
* [manual] Merge release/9.0-staging into release/9.0 by
@​PranavSenthilnathan in dotnet/runtime#120615
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/runtime#120719
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120765
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120779
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#120814
* [release/9.0] Update Microsoft.Build.* versions to 17.8.43 by
@​PranavSenthilnathan in dotnet/runtime#120820


**Full Changelog**:
dotnet/runtime@v9.0.10...v9.0.11

## 9.0.10

[Release](https://github.com/dotnet/runtime/releases/tag/v9.0.9)

## What's Changed
* [release/9.0-staging] Disable release assert on disallowed thread
re-initialization for managed C++ by @​github-actions[bot] in
dotnet/runtime#118842
* [release/9.0-staging] [wasm][AOT] fix codegen for small structs on
stack by @​github-actions[bot] in
dotnet/runtime#118416
* Update branding to 9.0.10 by @​vseanreesermsft in
dotnet/runtime#119280
* [release/9.0-staging] Don't use vfork on android by
@​github-actions[bot] in dotnet/runtime#118331
* [release/9.0-staging] [mono][debugger] Fix assertion when stepping by
@​github-actions[bot] in dotnet/runtime#118459
* [release/9.0-staging][maccatalyst] Check for -Wno-overriding-option
for compatibility with clang in Xcode 16.3+ by @​akoeplinger in
dotnet/runtime#119301
* [release/9.0-staging][HTTP] Stress fix for docker compose by
@​ManickaP in dotnet/runtime#119455
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/runtime#119505
* [9.0] Preserve Lock ID Members by @​jkoritzinsky in
dotnet/runtime#119281
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#118940
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#118151
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#118372
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#118423
* [release/9.0-staging] Update dependencies from dotnet/roslyn by
@​dotnet-maestro[bot] in dotnet/runtime#118193
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#118758
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119619
* [release/9.0-staging] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/runtime#119598
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119620
* [release/9.0-staging] Update dependencies from dotnet/xharness by
@​dotnet-maestro[bot] in dotnet/runtime#119051
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#118492
* [release/9.0-staging] [H/3] Fix interop tests. by
@​github-actions[bot] in dotnet/runtime#119522
* [release/9.0-staging] Disable tests parallelization in flaky OleDB
tests by @​github-actions[bot] in
dotnet/runtime#119626
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119690
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#118224
* [release/9.0-staging] Update dependencies from dotnet/runtime-assets
by @​dotnet-maestro[bot] in
dotnet/runtime#119677
* [release/9.0-staging] Update dependencies from dotnet/hotreload-utils
by @​dotnet-maestro[bot] in
dotnet/runtime#119635
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119669
* [release/9.0-staging] Fix recursion issue found in PROCCreateCrashDump
by @​github-actions[bot] in
dotnet/runtime#119128
* [release/9.0-staging] Update dependencies from dotnet/cecil by
@​dotnet-maestro[bot] in dotnet/runtime#119742
* [automated] Merge branch 'release/9.0' => 'release/9.0-staging' by
@​github-actions[bot] in dotnet/runtime#119721
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119753
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119793
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119809
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119832
* [release/9.0-staging] Update dependencies from dotnet/roslyn by
@​dotnet-maestro[bot] in dotnet/runtime#119830
* Backport macOS 26 Tahoe test fixes to release/9.0-staging by
@​vcsjones in dotnet/runtime#119716
* [release/9.0-staging] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#119871
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119872
* [release/9.0-staging] Disable Multicast SocketOption test by
@​github-actions[bot] in dotnet/runtime#119889
* [release/9.0-staging] Update dependencies from dotnet/icu by
@​dotnet-maestro[bot] in dotnet/runtime#119932
* [release/9.0] Update dependencies from dotnet/emsdk by
@​dotnet-maestro[bot] in dotnet/runtime#119900
* [manual] Merge release/9.0-staging into release/9.0 by @​tarekgh in
dotnet/runtime#119966
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120025
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/runtime#120111


**Full Changelog**:
dotnet/runtime@v9.0.9...v9.0.10

Commits viewable in [compare
view](dotnet/runtime@v9.0.9...v9.0.11).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Servicing-approved Shiproom has approved the issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants