Skip to content

Partially revert #13660: remove NuGet RestoreTask transient TaskHost workaround - #14297

Merged
JanProvaznik merged 3 commits into
dotnet:mainfrom
JanProvaznik:revert-restoretask-transient-taskhost-workaround
Jul 9, 2026
Merged

JanProvaznik merged 3 commits into
dotnet:mainfrom
JanProvaznik:revert-restoretask-transient-taskhost-workaround

Conversation

@JanProvaznik

Copy link
Copy Markdown
Member

Summary

Partially reverts #13660. That PR added a temporary workaround routing NuGet's RestoreTask to a transient (non-sidecar) TaskHost when running in /mt or MSBuild Server mode, to prevent NuGet's static singleton state (PluginManager, EnvironmentWrapper) from leaking across build invocations in a long-lived process.

This change removes that workaround so RestoreTask again follows normal TaskHost routing in all modes.

What is removed (workaround)

  • TaskRouter.RequiresTransientTaskHost + the NuGet.Build.Tasks.RestoreTask allow-list entry
  • AssemblyTaskFactory forceTransientTaskHost branch (useSidecarTaskHost reverted to pre-PR form)
  • BuildParameters.IsLongLivedHost / MarkProcessAsLongLivedHost() infrastructure (field, property, copy-ctor, Translate)
  • OutOfProcServerNode.Run() MarkProcessAsLongLivedHost() call
  • Associated TaskRouter_IntegrationTests cases and the mock NuGet.Build.Tasks.RestoreTask

What is kept (generic diagnostics from the same PR)

  • TaskHostTask TaskHostDetails per-invocation diagnostic logging
  • NodeProviderOutOfProcTaskHost.AcquireAndSetUpHost out hostProcessId, out wasNewlyCreated parameters
  • The TaskHostDetails resource string and its localized .xlf entries

Validation

  • Microsoft.Build builds clean (0 warnings/errors)
  • Microsoft.Build.Engine.UnitTests (net10.0) builds clean; remaining 7 TaskRouter_IntegrationTests pass
  • No dangling references to any removed symbol remain

Notes

The underlying NuGet static-state issue tracked in #13315 / #12246 should be considered when deciding whether this workaround is still needed.

…ost workaround

PR dotnet#13660 routed NuGet's RestoreTask to a transient (non-sidecar) TaskHost
in /mt and MSBuild Server modes to avoid leaking NuGet's static singleton
state across invocations. This removes that workaround so RestoreTask again
follows normal TaskHost routing in all modes, while keeping the generic
per-invocation TaskHost diagnostic logging (TaskHostDetails) introduced by
the same PR.

Removed:
- TaskRouter.RequiresTransientTaskHost + RestoreTask allow-list entry
- AssemblyTaskFactory forceTransientTaskHost branch (useSidecarTaskHost reverted)
- BuildParameters.IsLongLivedHost / MarkProcessAsLongLivedHost infrastructure
- OutOfProcServerNode.MarkProcessAsLongLivedHost() call
- Associated TaskRouter integration tests and mock RestoreTask

Kept:
- TaskHostTask TaskHostDetails diagnostic logging
- NodeProviderOutOfProcTaskHost.AcquireAndSetUpHost out-params
  (hostProcessId, wasNewlyCreated) and localized resource strings

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@JanProvaznik
JanProvaznik requested a review from OvesN July 9, 2026 10:52
@JanProvaznik
JanProvaznik marked this pull request as ready for review July 9, 2026 10:52
Copilot AI review requested due to automatic review settings July 9, 2026 10:52

Copilot AI 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 partially reverts #13660 by removing the special-case routing that forced NuGet’s RestoreTask to run in a transient (non-sidecar) TaskHost under /mt and MSBuild Server scenarios, returning restore task execution to the normal TaskHost routing behavior. It keeps the generic TaskHost diagnostics additions from #13660.

Changes:

  • Removed TaskRouter.RequiresTransientTaskHost and all RestoreTask-specific allow-list logic.
  • Removed BuildParameters.IsLongLivedHost / MarkProcessAsLongLivedHost() plumbing and the server-node initialization hook.
  • Deleted the associated integration tests and mock RestoreTask used to validate the workaround behavior.

Reviewed changes

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

Show a summary per file
File Description
src/Build/Instance/TaskFactories/AssemblyTaskFactory.cs Removes transient-TaskHost forcing for RestoreTask; restores pre-workaround sidecar selection logic.
src/Build/BackEnd/Node/OutOfProcServerNode.cs Removes server-process “long-lived host” marking used to drive the workaround.
src/Build/BackEnd/Components/RequestBuilder/TaskRouter.cs Deletes the RestoreTask allow-list helper (RequiresTransientTaskHost).
src/Build/BackEnd/BuildManager/BuildParameters.cs Removes the long-lived-host flag/property and its translation.
src/Build.UnitTests/BackEnd/TaskRouter_IntegrationTests.cs Removes tests and mock task validating transient TaskHost behavior for RestoreTask.

Comment thread src/Build/BackEnd/BuildManager/BuildParameters.cs
@JanProvaznik

Copy link
Copy Markdown
Member Author

autoreviewer locally passed, setting auto-merge

@JanProvaznik

Copy link
Copy Markdown
Member Author

coordinator test hang 👎

@JanProvaznik
JanProvaznik merged commit ebe081a into dotnet:main Jul 9, 2026
14 checks passed
WarperSan pushed a commit to WarperSan/ThunderPipe that referenced this pull request Sep 17, 2026
Updated
[Microsoft.Build.Utilities.Core](https://github.com/dotnet/msbuild) from
18.9.6 to 18.10.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Build.Utilities.Core's
releases](https://github.com/dotnet/msbuild/releases)._

## 18.10.1

## What's Changed
* [vs16.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13103
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13796
* [vs17.8] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13902
* [vs17.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13903
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13909
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13986
* Add vs18.9 to merge-flow config; retire vs18.3 by @​JanProvaznik in
dotnet/msbuild#14214
* Bump labeler-cache-retention to use issue-labeler v2.1.0 by
@​jeffhandley in dotnet/msbuild#14171
* Bump main to 18.10.0 after vs18.9 snap by @​JanProvaznik in
dotnet/msbuild#14216
* Improve release skill: Phase 2 DARC rules, VMR backflow, deterministic
baseline by @​JanProvaznik in
dotnet/msbuild#14220
* Determinize release: hardcode OptProf baseline + Phase 3.2 baseline
resolver by @​JanProvaznik in
dotnet/msbuild#14222
* Serialize BuildRequestConfiguration.RequestedTargets to fix solution
metaproject MSB4057 in parallel builds by @​ViktorHofer in
dotnet/msbuild#14223
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in dotnet/msbuild#14203
* Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T>
as task parameters by @​baronfel in
dotnet/msbuild#13971
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in dotnet/msbuild#14206
* Fix existence cache kind poisoning by @​AlesProkop in
dotnet/msbuild#14249
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in dotnet/msbuild#14226
* Don't disable the MSBuild server for /mt builds when node reuse is off
by @​AR-May in dotnet/msbuild#14248
* Enhance expert reviewer guidelines with additional checks. by @​AR-May
in dotnet/msbuild#14255
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in dotnet/msbuild#14253
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in dotnet/msbuild#14268
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in dotnet/msbuild#14267
* Bump github/gh-aw-actions/setup from 0.81.6 to 0.82.2 by
@​dependabot[bot] in dotnet/msbuild#14266
* Avoid boxing the struct enumerator in
PropertyDictionary<T>.GetEnumerator() by @​nareshjo in
dotnet/msbuild#14272
* Refresh copy marker when implementation output changes by @​AlesProkop
in dotnet/msbuild#14231
* Send task-host build process environment as delta by @​OvesN in
dotnet/msbuild#14126
* Add regression coverage for metadata newline preservation by
@​VolPlita in dotnet/msbuild#14261
* Fix EmbedInBinlog items with relative paths from child projects by
@​huulinhnguyen-dev in dotnet/msbuild#13990
* Stop requiring VersionPrefix updates in servicing - insert prerelease
versions to VS by @​ViktorHofer in
dotnet/msbuild#14277
* Fix WriteLinesToFile rewriting unchanged file when custom encoding is
used by @​huulinhnguyen-dev in
dotnet/msbuild#14146
* Enable trim/AOT analyzers for Microsoft.Build and clean up annotations
by @​JeremyKuhne in dotnet/msbuild#14064
* [automated] Merge branch 'vs18.9' => 'main' by @​github-actions[bot]
in dotnet/msbuild#14291
* Fix MicroBuild plugin feed URL to use allowed pkgs.dev.azure.com
format by @​AlesProkop in dotnet/msbuild#14295
* Pass ExcludeRestorePackageImports during restore to avoid redundant
evaluations by @​ViktorHofer with @​Copilot in
dotnet/msbuild#14274
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/msbuild#13988
* Adopt Clever Test Selection (CTS) as parallel, non-blocking PR
pipeline by @​jankratochvilcz in
dotnet/msbuild#14212
* Harden exceptions when connecting to server by @​JanProvaznik in
dotnet/msbuild#14292
* Update MicrosoftBuildVersion in analyzer template by
@​github-actions[bot] in dotnet/msbuild#13886
* Fix MSBuild Server client dropping build result under WaitAny race
(#​14172) by @​JanProvaznik in
dotnet/msbuild#14251
* Partially revert #​13660: remove NuGet RestoreTask transient TaskHost
workaround by @​JanProvaznik in
dotnet/msbuild#14297
* Disable daily AI credits guardrail for Expert Code Review workflow by
@​JanProvaznik with @​Copilot in
dotnet/msbuild#14314
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 14614733 by @​dotnet-bot in
dotnet/msbuild#14246
* Add opt-in partial (stop-after-pass) project evaluation by
@​ViktorHofer in dotnet/msbuild#14290
* Use partial evaluation for -getProperty/-getItem without a target by
@​ViktorHofer in dotnet/msbuild#14296
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in dotnet/msbuild#14324
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in dotnet/msbuild#14333
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in dotnet/msbuild#14330
* Bump github/gh-aw-actions/setup from 0.82.2 to 0.82.8 by
@​dependabot[bot] in dotnet/msbuild#14328
* Restrict partial evaluation to ProjectInstance by @​ViktorHofer in
dotnet/msbuild#14340
 ... (truncated)

Commits viewable in [compare
view](dotnet/msbuild@v18.9.6...v18.10.1).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Microsoft.Build.Utilities.Core&package-manager=nuget&previous-version=18.9.6&new-version=18.10.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants