Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas
, '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

Fix .NETFramework build breaks - #127200

Merged
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc
Apr 22, 2026
Merged

Fix .NETFramework build breaks#127200
ericstj merged 6 commits into
dotnet:mainfrom
danmoseley:runtime-fix-net481-pnse-doc

Conversation

@danmoseley

@danmoseleydanmoseley commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

When UseCompilerGeneratedDocXmlFile is true (the default) and a library is a PNSE assembly, eng/intellisense.targets adds a self-referencing ProjectReference with SetTargetFramework=net11.0 to pull enriched XML docs from the non-PNSE sibling build. In the NET481 build leg the local targeting pack (FrameworkList.xml) is never produced, so the inner net11.0 build fails with:

The shared framework must be built before the local targeting pack can be consumed.

This became visible after #124365 removed <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> from System.Reflection.Context, activating the PNSE doc-source path for the first time in that project.

Fix

Disable AddProjectReferenceToPNSEDocSource when doing a vertical build that is not for .NETCore.

This also fixes a build break in VB tests that was introduced while the NETFx build was broken.

Verification

Tested locally by building vertical builds for NETFx, Net11, and packages. Ran netfx tests for modified VB.Core library

Fixes#127007

When UseCompilerGeneratedDocXmlFile is true (the default) and a library
is a PNSE assembly, intellisense.targets adds a self-referencing
ProjectReference with SetTargetFramework=net11.0 to pull enriched XML
docs from the non-PNSE sibling build. In the NET481 build leg the local
targeting pack (FrameworkList.xml) is never produced, so the inner
net11.0 build fails with:
The shared framework must be built before the local targeting pack
can be consumed.
Guard the AddProjectReferenceToPNSEDocSource target with an Exists check
on the same FrameworkList.xml sentinel that targetingpacks.targets
already uses. When the file is absent the target is skipped and the PNSE
assembly builds without doc enrichment, which is the expected behavior
for partial-build configurations like the NET481 leg.
Fixesdotnet#127007
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

Updates the PNSE “doc-source” self-referencing ProjectReference logic in eng/intellisense.targets to avoid an inner net11.0 build in partial build configurations where the local targeting pack isn’t available (e.g., NET481-only legs), preventing failures like “The shared framework must be built before the local targeting pack can be consumed.”

Changes:

  • Adds an Exists(...) guard to AddProjectReferenceToPNSEDocSource so the PNSE doc-source P2P is skipped when FrameworkList.xml is missing.
  • Documents why PNSE doc enrichment is optional in partial build legs.
Show a summary per file
FileDescription
eng/intellisense.targetsAdds a targeting-pack existence guard to skip PNSE doc-source self-reference when the local ref pack isn’t present.

Copilot's findings

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

Comment threadeng/intellisense.targets Outdated
@danmoseley

Copy link
Copy Markdown
ContributorAuthor

@ericstj seems reasonable? I think this leaves build behavior how it was before the original csproj change, when it wasn't doing this P2P either.

Address review feedback: when UseBootstrapLayout is true, the local
targeting pack lives at BootstrapRefPackDir rather than
MicrosoftNetCoreAppRefPackDir. Check both locations so the PNSE
doc-source target fires correctly in bootstrap-layout builds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Comment threadeng/intellisense.targets Outdated
Co-authored-by: Eric StJohn <ericstj@microsoft.com>
CopilotAI review requested due to automatic review settings April 21, 2026 17:27

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

@danmoseley can you also review?

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@danmoseley

Copy link
Copy Markdown
ContributorAuthor

It won't let me sign off as author, but LGTM

@ericstj

Copy link
Copy Markdown
Member

This didn't work since we undefine BuildTargetFramework after we've selected which top-level csproj TargetFramework to build --

UndefineProperties="%(UndefineProperties);BuildTargetFramework" />

Looking into any other signal we might have that's not based on timing/build-order.

BuildTargetFramework is only ever read when filtering in outer builds and traversal projects, so it should have no impact on inner builds.
Undefining global properties can be dangerous since it can result in breaking MSBuild's build cache. It's safer to leave properties alone don't pass new global properties, or undefine them.
BuildTargetFramework should be set as global from the build entrypoint - leave it set throughout the build.
In this case I need BuildTargetFramework to that I can see in an inner build that a project is building as part of a vertical and should not attempt to build a configuration that's not part of that vertical.
Introduced when build was broken.
Comment threadsrc/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs Outdated
CopilotAI review requested due to automatic review settings April 21, 2026 18:59

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

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

@ericstjericstj changed the title Skip PNSE doc-source P2P when local targeting pack is unavailableFix .NETFramework build breaksApr 21, 2026
@ericstj

ericstj commented Apr 21, 2026

Copy link
Copy Markdown
Member

testing and doing more builds locally as described above -- update: local testing passed

@ericstj

Copy link
Copy Markdown
Member

There are still way too many tests failing here, I can't be certain they aren't caused by the fix. I'm giving this one rerun and will babysit.

@ericstj

Copy link
Copy Markdown
Member

It looks like those WASM tests are failing everywhere, filed a known issue. Trying to get this one in. Will continue watching.

@ericstj

Copy link
Copy Markdown
Member

/ba-g unbreak build

@ericstj
ericstj merged commit 3017e1c into dotnet:mainApr 22, 2026
155 of 169 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 22, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Libraries .NET 4.8.1 build failing

4 participants

@danmoseley@ericstj@jkotas