Add analyzer to detect @ref and @rendermode used together (BL0010) #63816
+440
−0
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.
Summary
Adds a new Roslyn analyzer rule
BL0010
that detects when both@ref
and@rendermode
are used on the same Blazor component call site, preventing a confusing runtimeInvalidCastException
.Problem
When developers use both
@ref
and@rendermode
on the same component, they encounter an unhelpful runtime error:Runtime exception:
This happens because when
@rendermode
is specified, ASP.NET Core wraps the component in anSSRRenderModeBoundary
, so the@ref
points to the boundary instead of the actual component.Solution
The new
ComponentRefAndRenderModeAnalyzer
detects this pattern at compile time by analyzingBuildRenderTree
methods for simultaneous calls to:AddComponentReferenceCapture
(generated by@ref
)AddComponentRenderMode
(generated by@rendermode
)When both are used on the same component, it reports diagnostic
BL0010
with clear guidance:Error Message:
Description:
Implementation Details
BL0010
BuildRenderTree
methods for performanceTesting
Added comprehensive test coverage with 5 test cases:
All existing analyzer tests continue to pass, ensuring no regressions.
Fixes issue where using
@ref
and@rendermode
together produces an unhelpful error message.Original prompt
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.