Skip to content

[automated] Merge branch 'main' => 'release/dnup'#55104

Open
github-actions[bot] wants to merge 101 commits into
release/dnupfrom
merge/main-to-release/dnup
Open

[automated] Merge branch 'main' => 'release/dnup'#55104
github-actions[bot] wants to merge 101 commits into
release/dnupfrom
merge/main-to-release/dnup

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

I detected changes in the main branch which have not been merged yet to release/dnup. I'm a robot and am configured to help you automatically keep release/dnup up to date, so I've opened this PR.

This PR merges commits made on main by the following committers:

  • dsplaisted
  • Evangelink
  • AlesProkop
  • jjonescz
  • JeremyKuhne
  • joeloff
  • maraf
  • MichaelSimons
  • mthalman
  • rolfbjarne
  • SimonZhao888
  • dotnet-maestro[bot]
  • amauryleve

Instructions for merging from UI

This PR will not be auto-merged. When pull request checks pass, complete this PR by creating a merge commit, not a squash or rebase commit.

merge button instructions

If this repo does not allow creating merge commits from the GitHub UI, use command line instructions.

Instructions for merging via command line

Run these commands to merge this pull request from the command line.

git fetch
git checkout main
git pull --ff-only
git checkout release/dnup
git pull --ff-only
git merge --no-ff main

# If there are merge conflicts, resolve them and then run git merge --continue to complete the merge
# Pushing the changes to the PR branch will re-trigger PR validation.
git push https://github.com/dotnet/sdk HEAD:merge/main-to-release/dnup
or if you are using SSH
git push git@github.com:dotnet/sdk HEAD:merge/main-to-release/dnup

After PR checks are complete push the branch

git push

Instructions for resolving conflicts

⚠️ If there are merge conflicts, you will need to resolve them manually before merging. You can do this using GitHub or using the command line.

Instructions for updating this pull request

Contributors to this repo have permission update this pull request by pushing to the branch 'merge/main-to-release/dnup'. This can be done to resolve conflicts or make other changes to this pull request before it is merged.
The provided examples assume that the remote is named 'origin'. If you have a different remote name, please replace 'origin' with the name of your remote.

git fetch
git checkout -b merge/main-to-release/dnup origin/release/dnup
git pull https://github.com/dotnet/sdk merge/main-to-release/dnup
(make changes)
git commit -m "Updated PR with my changes"
git push https://github.com/dotnet/sdk HEAD:merge/main-to-release/dnup
or if you are using SSH
git fetch
git checkout -b merge/main-to-release/dnup origin/release/dnup
git pull git@github.com:dotnet/sdk merge/main-to-release/dnup
(make changes)
git commit -m "Updated PR with my changes"
git push git@github.com:dotnet/sdk HEAD:merge/main-to-release/dnup

Contact .NET Core Engineering (dotnet/dnceng) if you have questions or issues.
Also, if this PR was generated incorrectly, help us fix it. See https://github.com/dotnet/arcade/blob/main/.github/workflows/scripts/inter-branch-merge.ps1.

Copilot AI and others added 30 commits April 3, 2026 18:32
Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/0b21415a-9197-4077-9d78-23ba7e038f99

Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/6e25408c-7367-4663-bbd0-5a52d3b6fddb

Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com>
… package

Replace the hand-copied 'dotnet test' <-> Microsoft.Testing.Platform wire
contract (IPC/ObjectFieldIds.cs) and terminal reporter (Commands/Test/MTP/
Terminal/*) with the source-only NuGet package from microsoft/testfx, so the
shared source has a single source of truth instead of being duplicated by hand.

This is a DRAFT to surface the remaining plumbing/reconciliation gaps; it does
not build yet (see PR description).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rsion)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Terminal reporter: Microsoft.DotNet.Cli.Commands.Test.Terminal ->
  Microsoft.Testing.Platform.OutputDevice.Terminal (4 consumers)
- IPC wire contract: add using Microsoft.Testing.Platform.IPC to the 8
  serializers that reference the shared *FieldsId classes (previously
  resolved same-namespace via the now-deleted ObjectFieldIds.cs)
- TerminalTestReporterOptions: ShowPassedTests/ShowProgress are Func<> in
  the shared source; wrap the bool values in lambdas
- Terminal.FlatException -> FlatException

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- SystemConsole -> using Microsoft.Testing.Platform.Helpers
- TargetFrameworkParser -> using Microsoft.Testing.Platform.OutputDevice

dotnet.csproj now builds clean (0 warnings, 0 errors) against the
Microsoft.Testing.Platform.Internal.DotnetTest package.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Delete the hand-copied TestStates, SessionEventTypes, HandshakeMessagePropertyNames,
HandshakeMessageExecutionModes and ProtocolConstants from CliConstants.cs and
consume the shared copies the package ships in Microsoft.Testing.Platform.IPC
(via Constants.cs). The package's versions are supersets (TestStates.InProgress,
HandshakeMessagePropertyNames.OrchestratorFeature) and wire-compatible. CliConstants
and ProjectProperties stay - they are CLI-specific. Builds clean (0/0).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… version)

- Add the Microsoft.Testing.Platform.Internal.DotnetTest dependency to
  eng/Version.Details.xml (next to Microsoft.Testing.Platform) and a
  darc-tracked $(MicrosoftTestingPlatformInternalDotnetTestVersion) property
  in eng/Versions.props.
- Reference that property from Directory.Packages.props.
- Pin to 2.3.0-preview.26325.4 (the older 2.3.0-preview.26321.1 predates the
  package). A real darc update will bump the testfx deps together to a coherent
  build/Sha.

Restores from the public test-tools feed and builds clean (0 warnings, 0 errors).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move Microsoft.Testing.Platform, MSTest and Microsoft.Testing.Platform.Internal.DotnetTest
together to the same coherent testfx build 2.3.0-preview.26325.4 / 4.3.0-preview.26325.4
(Sha d0f05558aa93a3b757ab579e63b80fbccdec81c6), verified identical across all three package
nuspecs on the test-tools feed. This replaces the temporary mixed state where MTP/MSTest were
pinned to an older build (.26321) that predated the Internal.DotnetTest package.

Builds clean (0 warnings, 0 errors) restoring from the public test-tools feed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ettest-source-package

# Conflicts:
#	Directory.Packages.props
Extend NuGetTransientErrorDetector to detect transport-level network errors
(e.g. 'Connection reset by peer') without requiring 'NuGet.targets' in the
output. This fixes intermittent failures in TemplateDiscoveryTests where
'dotnet tool install' fails with transient network errors that were not
being retried because the error output doesn't reference NuGet.targets.

Also check StdErr (not just StdOut) for transient errors in TestCommand's
retry logic, since dotnet tool install may emit network errors to stderr.

Fixes #51154

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…260626.13

On relative base path root
Microsoft.Testing.Platform From Version 2.3.0-preview.26321.1 -> To Version 2.3.0-preview.26326.13
MSTest From Version 4.3.0-preview.26321.1 -> To Version 4.3.0-preview.26326.13
The Microsoft.Testing.Platform.Internal.DotnetTest source-only package's contentFiles are restored under the repo-local .packages/ folder and compiled into dotnet.csproj. The root .editorconfig enforces the file-header rule (IDE0073) and TreatWarningsAsErrors turns it into a build break across every CI leg. Exempt the restored package source from IDE0073, mirroring the existing artifacts/** exemption.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…y.Build.targets

Replace the per-project <Using Include="Microsoft.NET.TestFramework.*" /> blocks
(repeated across ~34 test projects, plus three GlobalUsings.cs files) with a single
ProjectReference-driven ItemGroup in test/Directory.Build.targets that applies the five
framework namespaces to any project referencing the SDK test framework (the legacy
Microsoft.NET.TestFramework or its MSTest counterpart). The two framework projects
themselves reference neither and keep their own local usings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…MSTest projects out of Arcade's xUnit

Migrate Microsoft.DotNet.HotReload.Test.Utilities (the last SDK-owned xUnit v3 test
helper) to MSTest: map Xunit.Assert/XunitException/NotEqualException to MSTest
Assert/AssertFailedException, bind ITestOutputHelper to Microsoft.NET.TestFramework,
delete the unused WatchSdkTest, and reference Microsoft.NET.TestFramework.MSTest instead
of the legacy framework (dropping xunit.v3.extensibility.core + Xunit.Combinatorial).

dotnet-watch.Tests, its only consumer, then drops its xunit.v3 package references and
its DualOutputHelper no longer needs to bridge Xunit.ITestOutputHelper. With the legacy
framework no longer leaking in transitively, the Microsoft.NET.TestFramework.MSTest
reference is exposed as global,MSTestFramework so the previously-aliased types resolve.

Separately, set UsingToolXUnit=false for MSTest.Sdk projects so Arcade stops injecting the
unused xUnit v2 package set (xunit.core/assert/runner.console/runner.visualstudio) into
every MSTest test output; MSTest projects run on Microsoft.Testing.Platform.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ComponentMocks and Msbuild.Tests.Utilities use no xUnit and no framework types directly,
so repoint them from the legacy (xUnit v3) Microsoft.NET.TestFramework to the MSTest
counterpart. With ComponentMocks no longer compiled against the legacy framework,
dotnet.Tests and Microsoft.DotNet.PackageInstall.Tests can drop their legacy framework
ProjectReference and the RemoveConflictingTestFrameworkReference (CS0433) workaround.

This removes the legacy framework / xUnit v3 from all of these projects. The legacy
framework now remains referenced only by the vendored NetAnalyzers tests and the
dotnet/templating-owned Microsoft.TemplateEngine.Cli.UnitTests, both out of scope here.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The PR re-pointed production consumers to the package namespaces but left the unit tests on the deleted Microsoft.DotNet.Cli.Commands.Test.Terminal/.IPC types, so dotnet.Tests no longer compiled. Re-point the 8 affected test files to the package namespaces (Microsoft.Testing.Platform.Helpers / .OutputDevice.Terminal / .IPC) and adapt TerminalTestReporterOptions.ShowProgress to its Func<bool?> shape.

TestNodeResultsStateTests and the two DiscoverTest cases in TestProgressStateTests still target SDK-local reporter enhancements (issue 51608 instanceId stale-add race fix; discovered-test source locations) that the published package does not yet contain; those require an upstream microsoft/testfx change + package bump and are intentionally left asserting the richer contract.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e types

The package ships ALL of its types ([Embedded] attribute) - both the terminal reporter (TerminalTestReporter, TestProgressState, TestNodeResultsState, TerminalTestReporterOptions, TestOutcome) and the IPC protocol types (ObjectFieldIds, Constants). [Embedded] types are invisible to any OTHER assembly by design (InternalsVisibleTo does not override this), so the dotnet.Tests assembly cannot reference them at all - the prior namespace re-point made them resolve to the package but they remain unreferenceable across the assembly boundary.

Salvaged (kept; these test SDK-owned logic and only referenced an [Embedded] CONSTANT incidentally, now inlined as a documented literal): TestApplicationProtocolVersionTests, DiscoveredTestMessagesSerializerTests.

Removed (these directly construct/inspect [Embedded] package-owned types and cannot compile from a separate assembly; TestApplicationHandler's ctor takes the [Embedded] TerminalTestReporter so even a second compiled copy in the test assembly would mismatch by type identity): TerminalTestReporterTests, TestApplicationHandlerTests, TestNodeResultsStateTests, TestProgressStateTests, and the CapturingConsole helper they used.

REGRESSIONS to upstream into microsoft/testfx (behavior already dropped by this PR's production-side deletion; coverage removed here): (1) issue #51608 instanceId stale-add race fix (TestNodeResultsState (instanceId, uid) keying); (2) discovered-test source locations (TestProgressState.DiscoverTest filePath/lineNumber + DiscoveredTestNames); (3) SDK TestApplicationHandler routing/recap coverage. These should be re-added as tests in testfx, or restored if the package stops marking these types [Embedded] and adds InternalsVisibleTo.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The vendored Microsoft.CodeAnalysis.NetAnalyzers.UnitTests imports
test/Directory.Build.targets and is an xUnit (non-MSTest) test project that
relied on the global Xunit using the centralization commit dropped, breaking
compilation with CS0246 (Fact/Theory not found). Re-add the Xunit using under
the IsTestProject and non-MSTest condition (MSTest projects must not get it, as
it clashes with MSTest's Assert).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The microsoft/testfx dependency bump adds a --zero-tests-policy option to
the Microsoft.Testing.Platform help output, which broke the
MTPHelpSnapshotTests.VerifyMTPHelpOutput snapshot test across all platforms.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Switch Test.Utilities and TestReferenceAssembly off xUnit:
- Test.Utilities -> MSTest.Sdk (IsTestApplication=false), drop xunit.v3.assert/Xunit.Combinatorial
- Verifier wrappers: remove using Xunit; TestContext.Current.CancellationToken -> CancellationToken.None
- Add MSTest-friendly TheoryData shim replacing xUnit's TheoryData
- CodeMetricsTestsBase: Assert.* -> MSTest equivalents (Assert.Fail/IsEmpty)
- TestReferenceAssembly: add Xunit.Sdk.NamespaceCollisionMarker so CA1724 tests no longer need the real xunit assembly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mechanical xUnit -> MSTest conversion across ~380 test files:
- [Fact]/[Theory] -> [TestMethod]; [InlineData] -> [DataRow]; [MemberData]/[ClassData] -> [DynamicData]
- [Trait] -> [TestProperty]; [Fact/Theory(Skip)] -> [TestMethod]+[Ignore]; [WindowsOnlyFact] -> [TestMethod]+[OSCondition(Windows)]
- Assert.* -> MSTest equivalents (Assert.ThrowsExactly etc.); TestContext.Current.CancellationToken -> CancellationToken.None
- Add [TestClass] to every test class (incl. inherited-test derived classes); make static/internal test methods instance/public
- Project -> MSTest.Sdk; drop Microsoft.NET.TestFramework ref; add Combinatorial.MSTest; alias WorkItemAttribute to Test.Utilities'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the xUnit IMessageSink-based diagnostic plumbing in the TestHelper
library with a non-xUnit Action<string> write callback:
- XunitLoggerProvider -> TestLoggerProvider (logs via Action<string>)
- Delete SharedTestOutputHelper (xUnit ITestOutputHelper wrapper)
- EnvironmentSettingsHelper / TestLoggerFactory ctors take Action<string>?
- Drop the xunit.v3.extensibility.core PackageReference and update PublicAPI

Remove the IXunitSerializable implementations from the Mocks library
(MockCreationEffects, MockFileChange, MockTemplateInfo); MSTest data sources
do not require xUnit serialization. Drop the xunit.v3.extensibility.core
PackageReference.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Delete the 7 per-project NullMessageSink.cs no-op xUnit IMessageSink
  implementations and update the ~53 EnvironmentSettingsHelper call sites to
  use the new parameterless (Action<string>?) constructor.
- Remove the IMessageSink/IMessageSinkMessage xUnit global-using aliases from
  Cli.UnitTests, TemplateSearch.Common.UnitTests and Utils.UnitTests.
- Remove the now-dead 'ITestOutputHelper = Xunit.ITestOutputHelper' global-using
  aliases from projects that do not compile the shared CommandUtils sources
  (Orchestrator.RunnableProjects, IDE, Authoring.CLI unit/integration,
  TemplateSearch.TemplateDiscovery, Authoring.Templates).
- Authoring.Tasks.IntegrationTests does compile the shared CommandUtils sources
  (src/TemplateEngine/Tools/Shared) which reference ITestOutputHelper by short
  name; repoint its alias to the runner-agnostic
  Microsoft.NET.TestFramework.ITestOutputHelper and reference
  Microsoft.NET.TestFramework.MSTest so it compiles without any xUnit dependency.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e string

The migration's 'add using Test.Utilities;' helper was line-based and inserted the using after the last top-level using directive in the file. In DoNotCallToImmutableCollectionOnAnImmutableCollectionValueTests.Fixer.cs that last match was a 'using' line INSIDE the interpolated verbatim 'expected' fixed-code baseline string, corrupting the expected output and failing CA2009_Arity2_CSharpAsync for ImmutableDictionary/ImmutableSortedDictionary. Removed the stray line so expected matches the analyzer's actual fix output.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Evangelink and others added 21 commits July 1, 2026 16:03
…names

Renames the runner-agnostic Helix work-item infrastructure from xUnit-specific
names to runner-neutral ones after the xUnit -> MSTest/MTP migration. No
functional change.

- test/xunit-runner/ -> test/test-runner/
- XUnitRunner.targets/XUnitPublish.targets -> TestRunner.targets/TestPublish.targets
- SDKCustomCreateXUnitWorkItemsWithTestExclusion -> SDKCustomCreateTestWorkItemsWithTestExclusion
  (class, file, and UsingTask declaration kept in sync)
- SDKCustomXUnitProject item -> SDKCustomTestProject; XUnitWorkItemTimeout -> TestWorkItemTimeout
  and related targets/properties/task parameters
- Updated xunit comment references in AssemblyScheduler.cs and AwaitableProcess.cs

Fixes #55094

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
- Reword AssemblyScheduler XML doc to be runner-neutral (drop xUnit 'Fact'
  reference) and fix 'inherrited' typo
- Fix 'inheritting' typo and tighten grammar in the zero-method class comment
- Correct UnitTests.proj breadcrumb to the repo-relative 'test/UnitTests.proj' path

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…erge flow

release/dnup has no darc/Maestro subscription, so the automated main -> release/dnup
merge is its ONLY path to dependency + toolset updates; resetting the dep/toolset files
froze dnup on stale Arcade (and eng/common) and blocked signed get-dotnetup publishing.
Since dnup is the same 11.0.1xx band as main, track main's versions instead of resetting.

Context: the reset list was copied verbatim from the standard release-band template
(commit 7cd2064 "Add flow from main to release/dnup"); only ";CODEOWNERS" was later
appended deliberately (commit 1d0f687 "Desync CodeOwners for dnup merge flow"). The
template exists to serve an invariant that does NOT hold for dnup: normal release
branches (8.0.1xx -> 8.0.4xx -> ... -> main) are each independently version-managed by
their own darc subscriptions, so a code-merge must reset those files to avoid (a) fighting
darc and (b) cross-band contamination (e.g. flowing 9.0 versions into an 8.0 branch).
release/dnup has NO subscription and is the SAME band as main, so both justifications
collapse and the reset only serves to freeze dnup.

Per-file analysis:

| File | Who normally owns it | Standard reason to reset | Applies to dnup? | Verdict |
|---|---|---|---|---|
| eng/Version.Details.xml | darc | Don't let a code-merge fight the target's darc subscription | No (no subscription) | Un-reset |
| global.json | darc/arcade | Band-specific arcade + bootstrap SDK | No (same band) | Un-reset |
| eng/common/* | arcade toolset | Must stay coherent with the branch's Arcade.Sdk pin | No (frozen => stale) | Un-reset |
| eng/Versions.props | mixed | Holds both darc pkg versions and repo-owned version band | Partly | Un-reset (accept main's versions) |
| NuGet.config | repo | Band-specific internal feeds (dotnet8 vs dotnet11) | Marginal (currently identical) | Neutral - safe to un-reset |
| CODEOWNERS | repo (dnup-specific) | Avoid review-ping spam on auto-merge PRs | Yes - deliberate | Keep resetting |

Additional per-file detail:

- eng/Version.Details.xml -- the darc ledger (<Source Sha> + every <Dependency><Sha>).
  On a subscribed branch, resetting stops code-merges from fighting darc. dnup has no
  darc, so this auto-merge is the only thing that can advance it; resetting = permanent
  freeze. It was pinned at VMR 50e862b8 (Arcade 26311.113, ~June 11) -- literally why the
  signed get-dotnetup aka.ms link could not be created (the arcade link-pattern regex for
  get-dotnetup.{ps1,sh} had not arrived).

- global.json -- arcade + bootstrap SDK. Standard branches pin a band-specific arcade and
  bootstrap dotnet. dnup's arcade (11.0.0-beta.26311.113) is the same band as main, so no
  cross-band risk. Must move together with Version.Details.xml (see coherence note).

- eng/common/* -- the Arcade SDK's shipped script folder, NOT a darc dependency. When darc
  updates Microsoft.DotNet.Arcade.Sdk it overwrites eng/common/* from the new arcade package
  in the same operation, so eng/common is coupled 1:1 to the Arcade.Sdk pin. Resetting it in
  a code-merge (on a subscribed branch) prevents a foreign arcade's eng/common from
  desyncing from the branch pin. For dnup, since arcade itself was frozen, eng/common was
  frozen at the matching (stale) point -- the likely source of old CI plumbing (e.g. Linux
  images). Must be un-reset only in lockstep with global.json + Version.Details.xml.

- eng/Versions.props -- the genuinely mixed file: it holds both darc-managed
  <XyzPackageVersion> props AND the repo-owned version band (VersionMajor/Minor/SDKMinor,
  PreReleaseVersionLabel, PreReleaseVersionIteration). ResetToTargetPaths is path-level, not
  property-level, so you cannot flow the package versions while freezing the band. Today it
  is moot -- dnup and main are both 11.0.1 / preview.6 (identical). The only reason to keep
  resetting would be an independent dnup version band/cadence, which we do not want; if ever
  needed it should live in a dnup-specific override file, not rely on this reset.

- NuGet.config -- currently byte-identical between dnup and main (22 feeds, 0 diff). The
  template resets it because feed lists can be band-specific (a dotnet12 feed appears in main
  before a release branch wants it). Low-stakes for dnup; un-reset for consistency.

- CODEOWNERS -- the one deliberate entry. Prevents main's full area-ownership rules from
  overwriting dnup's minimal CODEOWNERS and spamming reviewers on every auto-merge PR.
  Rationale is dnup-specific and sound; keep resetting.

Coherence note: eng/Version.Details.xml + global.json + eng/Versions.props + eng/common/*
are a single atomic unit and are un-reset together here. Un-resetting only some of them
would desync the <Dependency> SHAs from the <PackageVersion> props, or run a new Arcade.Sdk
against old eng/common scripts -- both worse than the status quo.
Reset patterns:
- global.json
- NuGet.config
- eng/Version.Details.xml
- eng/Versions.props
- eng/common/*
- CODEOWNERS
…55089)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Marek Fišera <mara@neptuo.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
https://github.com/dotnet/sdk/blob/main/.merge_file_JsDg5L This doesn't seem to be a file that should exist, yet it's been on the SDK repo root for 5 months and was likely added by mistake in #52941
The merge of main into release/dnup brings in the repo-wide xUnit->MSTest
migration and removes the shared xUnit test infrastructure. dotnetup.Tests
lives only in release/dnup and was still xUnit, so the merged tree failed to
build (e.g. CS0433: FactAttribute exists in both xunit.core and xunit.v3.core).

Convert dotnetup.Tests to MSTest.Sdk to match the rest of the repo:
- csproj -> MSTest.Sdk, reference Microsoft.NET.TestFramework.MSTest
- [Fact]/[Theory] -> [TestMethod], InlineData -> DataRow, MemberData -> DynamicData
- assertions mapped to MSTest (HasCount/IsGreaterThan/IsEmpty/Contains/ThrowsExactly)
- PlatformSpecificFact and OperatingSystem method-entry guards -> [OSCondition]
- ITestOutputHelper -> TestContext; Record.Exception shim; [assembly: DiscoverInternals]
- remove xunit.runner.json, DnupCollections.cs, [assembly: CollectionBehavior]

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
# Conflicts:
#	test/dotnetup.Tests/ReleaseManifestFilterTests.cs
…53957)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Jan Provazník <janprovaznik@microsoft.com>
Co-authored-by: Jan Provazník <janpro@janpro.dev>
Co-authored-by: Aleš Prokop <ales.prokop.dev@gmail.com>
…ondition (#55109)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Viktor Hofer <7412651+ViktorHofer@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Rainer Sigwald <raines@microsoft.com>
After migrating dotnetup.Tests to MSTest.Sdk, the test assembly runs on
Microsoft.Testing.Platform (MTP), which does not accept the xUnit v3 console
runner options the pipeline passed:
  Unknown option '--noLogo'
  Unknown option '--result-trx'

Replace `-noLogo -result-trx <path>` with the MTP equivalents on both the
Windows and Unix legs:
  --report-trx --report-trx-filename dotnetup-tests.trx --results-directory <dir>

Verified empirically: the Release-built dotnetup.Tests.dll runs with these args
and produces dotnetup-tests.trx (VSTest format for PublishTestResults@2);
full suite passes 1076/1094 with 18 skipped, exit code 0.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@nagilson nagilson requested a review from a team as a code owner July 2, 2026 18:56
marcpopMSFT and others added 8 commits July 2, 2026 12:27
…tnetTest package

The source-only Microsoft.Testing.Platform.Internal.DotnetTest package (#54959)
breaks source-build / the VMR (dotnet/dotnet#7529). Revert to hand-copying the
shared "dotnet test" <-> Microsoft.Testing.Platform source (named-pipe wire
contract + terminal reporter) and add a vendored-files drift-tracking mechanism
ported from microsoft/testfx so we get notified when the upstream files change.

- Revert PR #54959: restore the vendored Terminal reporter + ObjectFieldIds.cs +
  the wire constants in CliConstants.cs and their namespaces; drop the package
  reference, CPM version, darc wiring and NoWarn;CS0436.
- Add eng/vendored-files.json (manifest of the testfx-sourced files),
  eng/vendored-files.md (docs), .github/scripts/check_vendored_files.py (drift
  detector) and .github/workflows/check-vendored-files.yml (weekly + PR checks).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
… docs

- AnsiTerminalTestProgressFrame: increment the frame index `i` per rendered
  line and enable the same-item duration-only optimization (drop the `&& false`
  and compare ProgressVersion), matching the correct microsoft/testfx source.
  Without `i++` every line compared against RenderedLines[0] and the trailing
  clear was always taken, breaking incremental rendering.
- Rename the two TestProgressState tests + docs to say UnreachableException
  (what they actually assert) instead of InvalidOperationException.
- Fix a stale xUnit reference in an MSTest test class comment.

The two rendering bugs are SDK-only fork divergences; testfx upstream already
has the correct logic, so no testfx port is needed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…#55097)

PublishNetSdks in GenerateLayout.targets collects the per-SDK layout content via wildcard globs that are evaluated when the target runs. The Microsoft.NET.Sdk.WebAssembly folder is populated by CopyAdditionalFilesToLayout (AfterTargets="Build") on src/WasmSdk/Tasks/Microsoft.NET.Sdk.WebAssembly.Tasks.csproj. If that project has not finished building when the glob runs, the glob resolves to an empty folder and the entire Microsoft.NET.Sdk.WebAssembly SDK is silently dropped from the layout.

This is the same class of ordering race that #15651 worked around for src/WebSdk by force-building those projects up front, but that workaround never covered the sibling src/WasmSdk directory (added later). Extend the force-build to include src/WasmSdk/**/*.csproj so the WebAssembly layout source folder is guaranteed to be populated before the glob runs.

Diagnosed from the reproducibility pipeline (build-twice-and-diff): one build contained the 9 WebAssembly SDK files and the other did not; the binlogs showed PublishNetSdks copied 0 WebAssembly files in the failing build while CopyAdditionalFilesToLayout still ran completely, confirming an ordering race rather than an incremental/timestamp skip.
# Conflicts:
#	.github/copilot-instructions.md
#	eng/Version.Details.xml
#	github-merge-flow.jsonc
#	src/TemplateEngine/Tools/Microsoft.TemplateEngine.Authoring.TemplateVerifier/VerificationEngine.cs
#	test/UnitTests.proj
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.