Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik
, '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

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update" - #127656

Merged
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation
May 3, 2026
Merged

Revert "Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update"#127656
adamsitnik merged 1 commit into
mainfrom
revert-125630-copilot/fix-feedback-implementation

Conversation

@sbomer

Copy link
Copy Markdown
Member

Reverts #125630

The Update in a target doesn't work (see dotnet/msbuild#2835 for the MSBuild behavior).

Fixes the dependency flow issue here: dotnet/sdk#53847 (comment).

@sbomer
sbomer requested review from a team and CopilotMay 1, 2026 18:36
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label May 1, 2026
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label May 1, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @dotnet/illink
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

Reverts the prior simplification that used MSBuild item Update in _PrepareTrimConfiguration, restoring a set-based approach to ensure TrimmerSingleWarn=false metadata is correctly applied to the ResolvedFileToPublish item(s) corresponding to @(IntermediateAssembly).

Changes:

  • Replace the ResolvedFileToPublish Update="@(IntermediateAssembly)" metadata update with explicit include/remove set operations to compute the intersection between @(ResolvedFileToPublish) and @(IntermediateAssembly).
  • Re-add the updated intersection items back into @(ResolvedFileToPublish) so downstream consumers observe the metadata.
Show a summary per file
FileDescription
src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targetsRestores reliable MSBuild item manipulation to apply TrimmerSingleWarn metadata to the intermediate assembly’s publish items without using Update in a target.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

@github-actions

Copy link
Copy Markdown
Contributor

🤖 Copilot Code Review — PR #127656

Note

This review was generated by GitHub Copilot.

Holistic Assessment

Motivation: This PR reverts PR #125630 which simplified the TrimmerSingleWarn intermediate assembly metadata update logic. The revert is well-justified — MSBuild's Update syntax inside targets has a known bug (dotnet/msbuild#2835) where it updates all items in the list instead of only matching ones, causing a real dependency flow failure.

Approach: A clean git revert is the correct approach for undoing a broken simplification. The restored intersection-based pattern is the established workaround for this MSBuild limitation.

Summary: ✅ LGTM. This is a clean revert that restores known-working logic. The set-intersection pattern is correct and well-commented. One optional suggestion for preventing future re-simplification attempts.


Detailed Findings

✅ Clean Revert — Verified correct

The revert is clean and focused. Only the expected file is modified, and the restored code exactly matches the pre-simplification state. No unrelated changes or scope creep.

✅ Restored MSBuild Logic — Verified correct

The set-intersection pattern is mathematically sound:

  1. __SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ IntermediateAssembly (set difference)
  2. _SingleWarnIntermediateAssembly = ResolvedFileToPublish \\ __SingleWarnIntermediateAssembly = ResolvedFileToPublish ∩ IntermediateAssembly
  3. Metadata is set on the intersection (only when TrimmerSingleWarn is not already set)
  4. Items are replaced in ResolvedFileToPublish via Remove+Include

This correctly limits TrimmerSingleWarn=false to only items that exist in both ResolvedFileToPublish and IntermediateAssembly, working around the MSBuild Update bug.

💡 Suggestion — Add preventive comment (follow-up, not blocking)

Future maintainers may attempt to "simplify" this code again. Consider adding a comment explaining why the simpler Update syntax cannot be used:

<!-- NOTE: Cannot use <ResolvedFileToPublish Update="@(IntermediateAssembly)"> because Update inside targets has a bug (dotnet/msbuild#2835) that updates ALL items instead of only matching ones. Use set operations instead. -->

This was flagged independently by multiple review models (Claude Sonnet 4.5, GPT-5.3-Codex).


Review contributed by: Claude Opus 4.6 (primary), Claude Sonnet 4.5, GPT-5.3-Codex

Generated by Code Review for issue #127656 ·

@sbomer

Copy link
Copy Markdown
MemberAuthor

/backport to release/11.0-preview4

@github-actions

Copy link
Copy Markdown
Contributor

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

@adamsitnikadamsitnik 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.

The revert LGTM, I am approving in order to unblock the dependency flow.

@adamsitnik
adamsitnik enabled auto-merge (squash) May 3, 2026 20:12
@adamsitnik

Copy link
Copy Markdown
Member

/ba-g DeadLetter is unrelated and has very high failure rate (11%)

@adamsitnik
adamsitnik merged commit fcd092d into mainMay 3, 2026
92 of 97 checks passed
@adamsitnik
adamsitnik deleted the revert-125630-copilot/fix-feedback-implementation branch May 3, 2026 20:13
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 3, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Tools-ILLink.NET linker development as well as trimming analyzerslinkable-frameworkIssues associated with delivering a linker friendly framework

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@sbomer@adamsitnik