Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

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

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update - #125630

Merged
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation
Apr 10, 2026
Merged

Simplify TrimmerSingleWarn intermediate assembly update using MSBuild item Update#125630
sbomer merged 3 commits into
mainfrom
copilot/fix-feedback-implementation

Conversation

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
Contributor

Description

Follow-up to PR #124801 review feedback: the "intersection via include/remove, then remove+re-include" pattern in _PrepareTrimConfiguration was complex, mutated item ordering, and used two throwaway item groups. Replace with a direct MSBuild Update.

Change

Before — compute intersection manually to set metadata, then remove+re-add items:

<__SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<__SingleWarnIntermediateAssemblyRemove="@(IntermediateAssembly)" />
<_SingleWarnIntermediateAssemblyInclude="@(ResolvedFileToPublish)" />
<_SingleWarnIntermediateAssemblyRemove="@(__SingleWarnIntermediateAssembly)" />
<_SingleWarnIntermediateAssembly>
<TrimmerSingleWarnCondition="...">false</TrimmerSingleWarn>
</_SingleWarnIntermediateAssembly>
<ResolvedFileToPublishRemove="@(_SingleWarnIntermediateAssembly)" />
<ResolvedFileToPublishInclude="@(_SingleWarnIntermediateAssembly)" />

After — update matching items directly, preserving order:

<ResolvedFileToPublishUpdate="@(IntermediateAssembly)">
<TrimmerSingleWarnCondition=" '%(ResolvedFileToPublish.TrimmerSingleWarn)' == '' ">false</TrimmerSingleWarn>
</ResolvedFileToPublish>

Changes proposed in this pull request

  • [Microsoft.NET.ILLink.targets] Replace 13-line intersection pattern with a 3-line Update in _PrepareTrimConfiguration
  • [Microsoft.NET.ILLink.targets] Qualify %(TrimmerSingleWarn) as %(ResolvedFileToPublish.TrimmerSingleWarn) in the Update condition to prevent MSB4096 (unqualified metadata batching over all ResolvedFileToPublish items, including those without the metadata defined)

Additional context


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

CopilotAIand others added 2 commits March 16, 2026 18:38
…pdate approach
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>
@dotnet-policy-servicedotnet-policy-serviceBot added the linkable-framework Issues associated with delivering a linker friendly framework label Mar 16, 2026
@github-actionsgithub-actionsBot added the area-Tools-ILLink .NET linker development as well as trimming analyzers label Mar 16, 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.

@sbomer

Copy link
Copy Markdown
Member

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/obj/coreclr/ILCompiler_inbuild/linux.x64.Release/singlefilehost" in item list "ResolvedFileToPublish" does not define a value for metadata "TrimmerSingleWarn". In order to use this metadata, either qualify it by specifying %(ResolvedFileToPublish.TrimmerSingleWarn), or ensure that all items in this list define a value for this metadata.

…ondition
Co-authored-by: sbomer <787361+sbomer@users.noreply.github.com>

CopilotAI commented Mar 16, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot fix this error:

##[error]src/tools/illink/src/ILLink.Tasks/build/Microsoft.NET.ILLink.targets(227,5): error MSB4096: (NETCORE_ENGINEERING_TELEMETRY=Build) The item "/__w/1/s/artifacts/o...

Fixed in 1cb9ce2. The unqualified %(TrimmerSingleWarn) in the Condition was triggering MSBuild to batch over all ResolvedFileToPublish items (not just those being updated), causing MSB4096 for items without that metadata. Changed to %(ResolvedFileToPublish.TrimmerSingleWarn) to qualify it properly.

CopilotAI requested a review from sbomerMarch 16, 2026 20:42
@sbomer
sbomer marked this pull request as ready for review April 6, 2026 23:27
CopilotAI review requested due to automatic review settings April 6, 2026 23:27
@sbomer
sbomer requested a review from a teamApril 6, 2026 23:28
@sbomer
sbomer enabled auto-merge (squash) April 6, 2026 23:28

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

This PR simplifies how TrimmerSingleWarn metadata is applied to the intermediate assembly within _PrepareTrimConfiguration by replacing an item “intersection + remove/re-include” pattern with a direct MSBuild item Update, which preserves item ordering and reduces complexity.

Changes:

  • Replace the multi-step intersection/remove/re-add logic with ResolvedFileToPublish Update="@(IntermediateAssembly)".
  • Qualify the metadata reference in the condition as %(ResolvedFileToPublish.TrimmerSingleWarn) to avoid unqualified-metadata batching issues (e.g., MSB4096) while updating items.

@sbomer

Copy link
Copy Markdown
Member

/ba-g "deadletter'

@sbomer
sbomer merged commit a8f6705 into mainApr 10, 2026
88 of 91 checks passed
@sbomer
sbomer deleted the copilot/fix-feedback-implementation branch April 10, 2026 16:49
adamsitnik pushed a commit that referenced this pull request May 3, 2026
… MSBuild item Update" (#127656)
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).
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 11, 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.

4 participants

@sbomer@jtschuster