[release/11.0-rc1] Use stable net/netframework folders for the mono SDK tasks - #132414
Open
github-actions[bot] wants to merge 1 commit into
Open
[release/11.0-rc1] Use stable net/netframework folders for the mono SDK tasks#132414github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
Follow-up to #130782, which did the same for `Microsoft.NET.Sdk.WebAssembly.Pack.Tasks`. The mono and WebAssembly SDK packages placed their task assemblies in TFM-versioned subfolders (`tasks/net11.0`, `tasks/net472`, `tools/net11.0`), and the `Sdk.props.in`/`Sdk.targets.in` templates hardcoded those TFMs via template tokens. Every .NET Core TFM bump then required coordinated updates across the layout producer and all of its consumers. This emits the task build output into stable, version-independent folders (`net` for .NET Core, `netframework` for .NET Framework) by overriding `OutputPath`/`IntermediateOutputPath`, mirroring `ILLink.Tasks`. It covers `WasmAppBuilder`, `WasmBuildTasks`, `MonoAOTCompiler`, `MonoTargetsTasks`, `LibraryBuilder`, `MobileBuildTasks`, `AppleAppBuilder`, `AndroidAppBuilder`, `HelixTestTasks` and `WorkloadBuildTasks`. The package layouts and the in-tree consumers (`Directory.Build.props`, `WasmApp.LocalBuild.props`, `AppleBuild.LocalBuild.props`) now use the same names, which also lets the hardcoded `_NetCoreAppToolCurrent` literals and the now-dead property forwarding in `tests.ioslike.targets` go away. With no TFM tokens left, the `.in` templates become fully static, so they're renamed to their final names and the `GenerateFileFromTemplate` steps are dropped from the pkgprojs. `WorkloadBuildTasks` keeps a TFM-named folder for its pinned `net8.0` build, since that one is selected by the consuming project's own TFM. Its `Sdk.targets` now defaults to `tasks/net` rather than resolving `tasks/$(TargetFramework)`, which silently produced a nonexistent path for consumers on any other TFM. ### Latent issues fixed along the way - The netframework `OutputPath` overrides are now guarded on `NetFrameworkToolCurrent` being non-empty. In source-only builds it is empty, so the bare `'$(TargetFramework)' == '$(NetFrameworkToolCurrent)'` comparison was *also* true in the outer build of a multi-targeting project (where `TargetFramework` is likewise empty), appending `netframework/` to the shared `OutputPath`. This applies to `Microsoft.NET.Sdk.WebAssembly.Pack.Tasks` too, which grew the same pattern in #130782. - `WasmBuildTasks.dll` was packaged at `tasks/` while `WasmBuildTasksAssemblyPath` pointed at `tasks/<TFM>/`. It now ships in `tasks/net` where the property resolves. - `src/tests/Common/Directory.Build.targets` re-derived the `WasmAppBuilder` and `MonoTargetsTasks` output paths instead of using the shared properties, so it had already drifted. It now uses them. - `TestExclusionListTasks` was removed in #123909 but left behind a stale project reference and two unused properties. - The `MonoAOTCompiler.Task` readme pointed at `tools/<target-framework>/` rather than the `tasks/` folder the package actually ships. ### Validation All 10 task projects build clean into `net` (+ `netframework` where multi-targeted), in both normal and source-only mode. All affected packages were packed and unzipped: they contain `tasks/net`, `tasks/netframework`, `tools/net` and `tasks/net8.0` as intended, with no TFM version strings in any package path. Every `*TasksAssemblyPath` property was evaluated and confirmed to resolve to a file that exists on disk. Fixes #123155 > [!NOTE] > This pull request was authored with the assistance of GitHub Copilot. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 50cbbd7b-5246-4157-959c-0f92990d8f73
github-actions
Bot
requested review from
akoeplinger,
lewing,
maraf,
steveisok and
vitek-karas
as code owners
August 17, 2026 16:19
|
Azure Pipelines: Successfully started running 4 pipeline(s). 12 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
maraf
approved these changes
Aug 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport of #132402 to release/11.0-rc1
/cc @akoeplinger
Customer Impact
[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.]
Regression
[If yes, specify when the regression was introduced. Provide the PR or commit if known.]
Testing
[How was the fix verified? How was the issue missed previously? What tests were added?]
Risk
[High/Medium/Low. Justify the indication by mentioning how risks were measured and addressed.]
IMPORTANT: If this backport is for a servicing release, please verify that:
release/X.0-staging, notrelease/X.0.release/X.0(no-stagingsuffix).Package authoring no longer needed in .NET 9
IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older versions.