[release/10.0] Fix ComInterfaceGenerator collision on same-named methods in disjoint cross-assembly bases#129473
Open
Copilot wants to merge 2 commits into
Open
Conversation
Co-authored-by: AaronRobinsonMSFT <30635565+AaronRobinsonMSFT@users.noreply.github.com>
Co-authored-by: AaronRobinsonMSFT <30635565+AaronRobinsonMSFT@users.noreply.github.com>
Copilot created this pull request from a session on behalf of
AaronRobinsonMSFT
June 16, 2026 17:12
View session
Contributor
|
Tagging subscribers to this area: @dotnet/interop-contrib |
Contributor
There was a problem hiding this comment.
Pull request overview
Ports a servicing-safe fix to the ComInterfaceGenerator for release/10.0 to prevent key collisions when collecting externally-defined COM interface methods that share the same name across disjoint base interfaces (cross-assembly inheritance scenario, issue #122708).
Changes:
- Extend generator-internal
ComMethodInfoidentity for externally-defined methods with a stable per-symbolExternalSymbolId(doc comment id / fully-qualified fallback) to avoid dictionary key collisions. - Add SharedTypes test assets that model two external base interfaces with same-named methods.
- Add cross-assembly inheritance regression coverage validating combined and standalone implementations.
Show a summary per file
| File | Description |
|---|---|
| src/libraries/System.Runtime.InteropServices/tests/TestAssets/SharedTypes/BaseInterfaces/ISameNameMethodsDifferentAssembly.cs | Adds external base interfaces with same-named MyMethod to reproduce the collision shape across assemblies. |
| src/libraries/System.Runtime.InteropServices/tests/ComInterfaceGenerator.Tests/Interfaces/IDerivedFromExternalSameName.cs | Adds derived test interfaces that inherit the new external bases (with SYSLIB1230 suppressed, consistent with existing tests). |
| src/libraries/System.Runtime.InteropServices/tests/ComInterfaceGenerator.Tests/CrossAssemblyInheritanceTests.cs | Adds regression tests covering both-disjoint-bases and standalone base-path behavior through StrategyBasedComWrappers. |
| src/libraries/System.Runtime.InteropServices/gen/ComInterfaceGenerator/ComMethodInfo.cs | Fixes external-method keying by incorporating ExternalSymbolId into record equality/hash for externally-defined methods. |
Copilot's findings
- Files reviewed: 4/4 changed files
- Comments generated: 0
elinor-fung
approved these changes
Jun 16, 2026
Open
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
main PR AaronRobinsonMSFT@55aa5e6
Addresses #122708 in .NET 10.
Description
Cross-assembly
[GeneratedComInterface]inheritance could fail generation when disjoint external bases each exposed a same-named method (customer repro:MyMethod), producing CS8785 from aComMethodInfodictionary key collision. This PR ports the servicing-safe dedup fix forrelease/10.0and adds targeted regression coverage.Customer Impact
Without this fix, valid cross-assembly COM interface hierarchies fail to compile under source generation, blocking .NET 10 migration scenarios reported by enterprise customers.
Regression
No. This is a latent key-collision bug in external-interface handling, surfaced by specific same-name cross-assembly method shapes.
Testing
ComMethodInfokey).ComInterfaceGenerator.Tests(with standard failing/ignore/outerloop exclusions); new tests and suite pass.Risk
Low. Change is surgical and confined to generator-internal key identity for externally-defined methods; no public API, generated source contract, or runtime behavior changes.