[Learning] Improve error handling for PlatformNotSupportedException during MSI JSON encoding (SIMD intrinsics unavailable) #5523
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When MSI flows build claims/client-capabilities JSON on platforms without hardware intrinsics support (32-bit processes, old CPUs, or disabled intrinsics),
System.Text.Encodings.Web
throwsPlatformNotSupportedException
. This exception bubbles up through Azure.Identity as a cryptic error that appears to be an MSI/KeyVault issue, causing users to debug in the wrong direction.Stack trace users see:
Solution
This PR wraps
PlatformNotSupportedException
in an actionableMsalClientException
with comprehensive diagnostic information to guide users to the correct resolution.Changes Made
MsalError.JsonEncoderIntrinsicsUnsupported = "json_encoder_intrinsics_unsupported"
)RuntimeInformation.ProcessArchitecture
)Environment.Is64BitProcess
)DOTNET_EnableHWIntrinsic
orCOMPlus_EnableHWIntrinsic
)ClaimsHelper.GetMergedClaimsAndClientCapabilities()
,JsonHelper.JsonObjectToString()
, andJsonHelper.Merge()
PlatformNotSupportedException
andTypeInitializationException
wrapper (for static initialization scenarios)User Experience Improvement
Before: Hours spent debugging what appears to be an MSI/KeyVault configuration issue
After: Immediate, actionable error message:
Common Resolution Scenarios
DOTNET_EnableHWIntrinsic=0
DOTNET_EnableHWIntrinsic=1
to0
Design Decisions
Testing
Related Issue
Fixes #[issue number] (related to internal incident https://portal.microsofticm.com/imp/v5/incidents/details/693043934/summary)
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.