Skip to content

Commit 1bb446c

Browse files
JunielKatarnCopilotCopilotgmacmaster
authored
[0.84] Upgrades including Visual Studio 2026 (#16232)
* Upgrade to PowerShell 7 (#16075) * Ran NuGetRestoreForceEvaluateAllSolutions.ps1 * Define installNuGetPackages task; Install pwsh 7.6.1 * Replace powershell.exe with pwsh.exe * Change files * CI: Ensure NuGet is availabe before `yarn install` * Add NuGetAuthenticate before yarn install * Do not download PowerShell on CI/CD environments * Fix just-task JS syntax * Add dotnet-tools manifest * Fix pwsh.exe tool path * Resolve dotnet-tools.json path * Use dotnet for `nuget locals` * Use PWSH in nuget-restore-task.js * Break dependency loop in just-task * Update other ADO tasks * Update @react-native-windows/automation * Rename findPwsh as findPowerShell * Drop powershell export from commandWithProgress * Change files * Add README for find-dotnet-tools * Add README to package.json * Adjust newline * Run task `installDotnetTools` only when not in CI * Install .NET tools in CI * Install .NET on prepare-js-env * Do not install .NET tools on CI * Quote powershell path * fix yarn lint * Ran NuGetRestoreForceEvaluateAllSolutions.ps1 * Restore deleted lock files * Add missing dependency * Use -Command for compatible PWSH calls * Use -Command pwsh argument * Correct runPowerShellScriptFunction cmd escaping * Quote pwsh command in runPowerShellScriptFunction * Remove quotes * Quote remaining findPowerShell() calls for execSync * Add temporary diagnostic commands * Diagnostics * Diagnostics * Diagnostics * Add runPowerShellScriptFunction argument to delegate Appx-related commands to Windows PowerShell * Remove diagnostics steps * Use execFileSync instead of execSync in deploy.ts * Remove querystrings from FS paths * Suppress warning when using `-UseWindowsPowerShell` * Revert "Remove querystrings from FS paths" This reverts commit e1f3cfd. * Use pipe semantics for Get-AppxPackage in resolveAppName * Hard-fail if PowerShell 7 cannot be found. Do not fall back to Windows PowerShell (powershell.exe). PowerShell code may not be backwards compatible. * Improve missing pwsh.exe error message * Add package resolution pipeline test * UseWindowsPowerShell for package resolution test * Try to read package Microsoft.PrintDialog * Replace stderr redirection with -WarningAction * Replace stderr redirection with -WarningAction * Print sample app names on appWindow error * Add more diagnostics * Add missing -WarningAction SilentlyContinue * Revert "Add more diagnostics" This reverts commit 8c10bc4. * Revert "Print sample app names on appWindow error" This reverts commit 6e70148. * Remove CI probing tasks * Revert "Use pipe semantics for Get-AppxPackage in resolveAppName" This reverts commit 6c46c73. Co-authored-by: Copilot <copilot@github.com> * Remove unused escaping logic * Re-introduce deleted .lock.json --------- Co-authored-by: Copilot <copilot@github.com> * Fix PowerShell installation (#16164) * Defer findPowershell to layoutMSRNCxx * Change files * Upgrade to Visual Studio 2026 (#16170) * Update deps script. TODO: test * Upgrade rnw-deps to .NET 10 * Defer findPowershell to layoutMSRNCxx * Upgrade VS version to 18.6.1 * Drop /async in MSVC 14.5 * Replace std::future coroutines with WinRT types * clang format * Change files * Drop Windows10SDK.19041 * Change files * Set TargetFramework to net10.0-windows10.0.26100.0 * Use IAsyncOperation instead of out parameters * Install .NET 10 * Revert "Install .NET 10" This reverts commit 5f75dc0. * Revert "Set TargetFramework to net10.0-windows10.0.26100.0" This reverts commit 22a4791. * clang format * Upgrade CsWinRT.csproj to .NET 8 * Fix filters * Upgrade MSRN SLN to VS 18 * Revert parameter signature in LoadBundleAsync * Update CSWinRT lock * Allow all versions of VS 2026 * Use IBuffer instead of hstring as payload GetJavaScriptFromServerAsync retuns bundle contents as hstring (16 bit) It then gets converted to an 8-bit string. This conversion drops bytes consideres "invalid". Those bytes are expected as part of the Hermes bundle header. Transmitting the bundle as an IBuffer preserves the original bytes and avoids the conversion issues. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Use WinRT exception types instead of std --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Upgrade to GoogleTest Adapter 1.8.1.8 (#16218) * Upgrade to GoogleTest adapter 1.8.1.8 * Change files * Update package lock files * Upgrade CI agents to Windows Server 2025 (#16208) * Use image rnw-img-vs2026-node24 * Update fork-sync/bin.js chmod * Upgrade to MSVC 14.5 * Drop -UseWindowsPowerShell fallback * Manually install yarn * Upgrade to .NET Hosting Bundle 10.0.8 * Change files * Fix change file * Add temp npm install yarn in templates * Test yarn location * update * update * TEMPORARILY revert agent image * Print yarn version in setup * Revert "TEMPORARILY revert agent image" This reverts commit 7c175e1. * update * update * update * Upgrade to msbuildVersion: 18.0 * Update Google test adapter location * Remove unused statement * Remove probing tasks * Upgrade to VSTest@3 * Upgrade more projects and scripts to VS 2026 * Explicitly set vstest.console location * Install midgard-yarn and verdaccio in-place * Fix yarn version * Update node-tests version * Use pwsh in Add-AppDevPackage * Make WindowsStoreAppUtils use PowerShell 7 * Update snapshot values * Update snapshot from failing x86 run * Use the --tag argument for verdaccio under Node 24 * Ignore/warn on unstable click test * Enable WMIC for RN Doctor * Disable RN doctor until it drops WMIC * Add rnw-img-vs2026-node24.json (#16224) * Update CI verdaccio to 6.7.2 (#16223) * Upgrade to Microsoft.WindowsAppSDK 1.8.260508005 (#16225) * Upgrade to Microsoft.WindowsAppSDK 1.8.260508005 * Change files * fix: WebSocket binaryType handling — stop unconditional Blob interception of binary messages (#16173) * blob support (#8) * blob support * pr comments * pr comments * Update DefaultBlobResource.cpp * Create react-native-windows-c3827e14-777b-475a-bf00-dc169bf89f3d.json * Add WebSocketArrayBuffer headless test (#9) * Add WebSocketArrayBuffer headless test * Skip test by default * pr comments * Update overrides (#10) --------- Co-authored-by: Julio César Rocha <JunielKatarn@users.noreply.github.com> * Upgrade projects to .NET 10 (#16226) * Upgrade projects to .NET 10 * Upgrade lock files * Change files * Fix missing conflicts * Update packages lock * Remove extra yarn step * Re-introduce JS Desktop integration tests (#16228) * Remove redundant condition Desktop.IntegrationTests.SkipRNTester Modify Desktop.IntegrationTests.Filter instead. * Re-introduce WebSocket and WebSocketBlob tests * Make WSBlob test compare contents * Rename method to RunTest * Handle initial message from default endpoint * Change files * Migrate XHR test * Port Fetch test * Port Blob test * WebSocketMultipleSendTest * Remove JS WebSocket servers * Skip in CI for now * Remove ban-types * Fix DynamicReaderWriterTests * Use WinRT coroutine types for UwpScriptStore * clang format --------- Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Gordon MacMaster <31481849+gmacmaster@users.noreply.github.com>
1 parent 487fb18 commit 1bb446c

134 files changed

Lines changed: 2097 additions & 1612 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.ado/build-template.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ parameters:
2020
default:
2121
Medium:
2222
name: rnw-pool-4-microsoft
23-
demands: ImageOverride -equals rnw-img-vs2022-node22
23+
demands: ImageOverride -equals rnw-img-vs2026-node24
2424
Large:
2525
name: rnw-pool-8-microsoft
26-
demands: ImageOverride -equals rnw-img-vs2022-node22
26+
demands: ImageOverride -equals rnw-img-vs2026-node24
2727

2828
- name: desktopBuildMatrix
2929
type: object
@@ -161,6 +161,13 @@ extends:
161161
version: '24.x'
162162
displayName: Use Node.js 24.x
163163

164+
# TODO: REMOVE. Should be included in image.
165+
- task: CmdLine@2
166+
inputs:
167+
script: |
168+
npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2
169+
displayName: Install Node base packages
170+
164171
- template: .ado/templates/compute-beachball-branch-name.yml@self
165172

166173
# 4. Beachball tooling (developer builds only)
@@ -274,6 +281,7 @@ extends:
274281
#12714 - Disable for first deployment of test website.
275282
- name: Desktop.IntegrationTests.Filter
276283
value: >
284+
(FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests)&
277285
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectClose)&
278286
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectNoClose)&
279287
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::SendReceiveClose)&
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"artifacts": [
3+
{
4+
"name": "windows-EnableDeveloperMode"
5+
},
6+
{
7+
"name": "windows-enable-long-paths"
8+
},
9+
{
10+
"name": "Windows-ServerAddFeature",
11+
"parameters": {
12+
"FeatureName": "Web-Server"
13+
}
14+
},
15+
{
16+
"name": "Windows-ServerAddFeature",
17+
"parameters": {
18+
"FeatureName": "Web-Scripting-Tools"
19+
}
20+
},
21+
{
22+
"name": "windows-gitinstall"
23+
},
24+
{
25+
"name": "windows-AzPipeline-ImageHelpers"
26+
},
27+
{
28+
"name": "windows-AzPipeline-InitializeVM"
29+
},
30+
{
31+
"name": "windows-AzPipeline-powershellCore"
32+
},
33+
{
34+
"name": "windows-AzPipeline-7zip"
35+
},
36+
{
37+
"name": "windows-visualstudio-bootstrapper",
38+
"parameters": {
39+
"Workloads": "--add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core --add Microsoft.VisualStudio.ComponentGroup.UWP.Support --add Microsoft.VisualStudio.ComponentGroup.UWP.VC --add Microsoft.Component.MSBuild --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended --includeOptional",
40+
"SKU": "Enterprise",
41+
"VSBootstrapperURL": "https://aka.ms/vs/18/stable/vs_Enterprise.exe"
42+
}
43+
},
44+
{
45+
"name": "Windows-NodeJS",
46+
"parameters": {
47+
"Version": "24.16.0"
48+
}
49+
},
50+
{
51+
"name": "windows-chrome"
52+
},
53+
{
54+
"name": "windows-AzPipeline-WinAppDriver"
55+
},
56+
{
57+
"name": "windows-dotnetcore-sdk",
58+
"parameters": {
59+
"DotNetCoreVersion": "10.0.300"
60+
}
61+
},
62+
{
63+
"name": "Windows-AzureCLI"
64+
}
65+
]
66+
}

.ado/jobs/desktop-single.yml

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,24 @@ steps:
2424
- template: ../templates/checkout-shallow.yml
2525

2626
# Set up IIS for integration tests
27-
- pwsh: |
28-
Install-WindowsFeature -Name Web-Server, Web-Scripting-Tools
29-
displayName: Install IIS
30-
3127
- pwsh: |
3228
$DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1"
3329
3430
& $DownloadScript `
35-
-Uri 'https://download.visualstudio.microsoft.com/download/pr/20598243-c38f-4538-b2aa-af33bc232f80/ea9b2ca232f59a6fdc84b7a31da88464/dotnet-hosting-8.0.3-win.exe' `
36-
-OutFile dotnet-hosting-8.0.3-win.exe
31+
-Uri 'https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.8/dotnet-hosting-10.0.8-win.exe' `
32+
-OutFile dotnet-hosting-10.0.8-win.exe
3733
3834
Write-Host 'Installing .NET hosting bundle'
39-
Start-Process -Wait -FilePath .\dotnet-hosting-8.0.3-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
35+
Start-Process -Wait -FilePath .\dotnet-hosting-10.0.8-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
4036
Write-Host 'Installed .NET hosting bundle'
41-
42-
& $DownloadScript `
43-
-Uri 'https://download.visualstudio.microsoft.com/download/pr/f2ec926e-0d98-4a8b-8c70-722ccc2ca0e5/b59941b0c60f16421679baafdb7e9338/dotnet-sdk-7.0.407-win-x64.exe' `
44-
-OutFile dotnet-sdk-7.0.407-win-x64.exe
45-
46-
Write-Host 'Installing .NET 7 SDK'
47-
Start-Process -Wait -FilePath .\dotnet-sdk-7.0.407-win-x64.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
48-
Write-Host 'Installed .NET 7 SDK'
4937
displayName: Install the .NET Core Hosting Bundle
5038
39+
# Version should match NuGet package version used at vnext\PropertySheets\WinUI.props: WinUI3Version
5140
- pwsh: |
5241
$DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1"
5342
5443
& $DownloadScript `
55-
-Uri 'https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe' `
44+
-Uri 'https://aka.ms/windowsappsdk/1.8/1.8.260508005/windowsappruntimeinstall-x64.exe' `
5645
-OutFile windowsappruntimeinstall-x64.exe
5746
5847
Write-Host 'Installing Windows App SDK Runtime'
@@ -70,12 +59,6 @@ steps:
7059

7160
- template: ../templates/apply-published-version-vars.yml
7261

73-
- ${{ if eq(variables['Desktop.IntegrationTests.SkipRNTester'], true) }}:
74-
- pwsh: |
75-
$newValue = '(FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests::)&' + "$(Desktop.IntegrationTests.Filter)"
76-
Write-Host "##vso[task.setvariable variable=Desktop.IntegrationTests.Filter]$newValue"
77-
displayName: Update Desktop.IntegrationTests.Filter to exclude RNTester integration tests
78-
7962
- template: ../templates/msbuild-sln.yml
8063
parameters:
8164
solutionDir: vnext
@@ -97,7 +80,7 @@ steps:
9780
- template: ../templates/discover-google-test-adapter.yml
9881

9982
- ${{ if ne(parameters.buildPlatform, 'ARM64EC') }}:
100-
- task: VSTest@2
83+
- task: VSTest@3
10184
displayName: Run Desktop Unit Tests
10285
timeoutInMinutes: 5 # Set smaller timeout, due to hangs
10386
inputs:
@@ -115,6 +98,7 @@ steps:
11598
publishRunAttachments: true
11699
collectDumpOn: onAbortOnly
117100
vsTestVersion: latest
101+
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
118102
failOnMinTestsNotRun: true
119103

120104
# Suspected debug assert in TestRunner hanging tests randomly. Run only on Release for now.
@@ -211,7 +195,7 @@ steps:
211195
Invoke-WebRequest -UseBasicParsing -Uri "http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=windows&dev=true"
212196
continueOnError: true
213197

214-
- task: VSTest@2
198+
- task: VSTest@3
215199
displayName: Run Desktop Integration Tests
216200
inputs:
217201
testSelector: testAssemblies
@@ -224,6 +208,7 @@ steps:
224208
publishRunAttachments: true
225209
collectDumpOn: onAbortOnly
226210
vsTestVersion: latest
211+
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
227212
failOnMinTestsNotRun: true
228213
otherConsoleOptions: '/blame -- RunConfiguration.TestSessionTimeout=300000'
229214

.ado/jobs/e2e-test.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,21 @@ jobs:
320320
condition: and(failed(), eq(variables.StartedFabricTests, 'true'))
321321
continueOnError: true
322322
323+
- pwsh: |
324+
if (Test-Path "packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__") {
325+
Write-Host "##vso[task.setvariable variable=DiffOutputExists]true"
326+
}
327+
displayName: Check for image diff output folder
328+
condition: failed()
329+
330+
- task: CopyFiles@2
331+
displayName: Copy Fabric image diffs
332+
inputs:
333+
sourceFolder: packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__
334+
targetFolder: $(Build.StagingDirectory)/snapshots-image-diffs
335+
contents: "**"
336+
condition: and(failed(), eq(variables.DiffOutputExists, 'true'))
337+
323338
- script: npx jest --clearCache
324339
displayName: clear jest cache
325340
workingDirectory: packages/e2e-test-app-fabric

.ado/jobs/node-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ parameters:
1111

1212
- name: versions
1313
type: object
14-
default: [22]
14+
default: [24]
1515

1616
jobs:
1717
- ${{ each nodeVersion in parameters.versions }}:

.ado/jobs/universal-single.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ steps:
5050
# --- Tests (run against the just-built binaries, no download/restore needed) ---
5151
- template: ../templates/discover-google-test-adapter.yml
5252

53-
- task: VSTest@2
53+
- task: VSTest@3
5454
displayName: Run Universal Unit Tests (Native)
5555
timeoutInMinutes: 5 # Set smaller timeout, due to hangs
5656
inputs:
@@ -67,5 +67,6 @@ steps:
6767
publishRunAttachments: true
6868
collectDumpOn: onAbortOnly
6969
vsTestVersion: latest
70+
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
7071
failOnMinTestsNotRun: true
7172
condition: and(succeeded(), not(eq('${{ parameters.buildPlatform }}', 'ARM64')))

.ado/pr-pipeline.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ extends:
2222
AgentPool:
2323
Medium:
2424
name: rnw-pool-4
25-
demands: ImageOverride -equals rnw-img-vs2022-node22
25+
demands: ImageOverride -equals rnw-img-vs2026-node24
2626
Large:
2727
name: rnw-pool-8
28-
demands: ImageOverride -equals rnw-img-vs2022-node22
28+
demands: ImageOverride -equals rnw-img-vs2026-node24

.ado/scripts/build.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ function ensureNuGet(toolsPath) {
101101
ensureDir(toolsPath);
102102
console.log(`Downloading nuget.exe to: ${localNuGet}`);
103103
execSync(
104-
`powershell.exe -NoLogo -NoProfile -Command ` +
104+
`pwsh.exe -NoLogo -NoProfile -Command ` +
105105
`"[Net.ServicePointManager]::SecurityProtocol = ` +
106106
`[Net.SecurityProtocolType]::Tls12; ` +
107107
`Invoke-WebRequest -Uri 'https://dist.nuget.org/win-x86-commandline/latest/nuget.exe' ` +
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
steps:
22

33
- pwsh: |
4-
$vsExtensionPath="${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\";
5-
$GoogleTestAdapterPath=(Get-ChildItem $vsExtensionPath -Directory | Where-Object -FilterScript {Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll")}).FullName
4+
$extensionsPath = "${env:ProgramFiles}\Microsoft Visual Studio\18\Enterprise\Common7\IDE\Extensions"
5+
$adapterPath = Get-ChildItem $extensionsPath -Directory |`
6+
Where-Object -FilterScript { Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll") } |`
7+
Select-Object -ExpandProperty FullName
68
79
# Test the path to the google test adapter
8-
Test-Path -Path $GoogleTestAdapterPath
10+
Test-Path -Path $adapterPath
911
10-
Write-Debug "Setting Google Test Adapter Path to '$GoogleTestAdapterPath' found in '$vsExtensionPath'"
11-
Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$GoogleTestAdapterPath"
12+
Write-Debug "Setting Google Test Adapter Path to '$adapterPath' found in '$extensionsPath'"
13+
Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$adapterPath"
1214
displayName: Set GoogleTestAdapterPath

.ado/templates/install-SDK.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ steps:
77
targetType: filePath
88
filePath: vnext\Scripts\Install-WindowsSdkISO.ps1
99
arguments: ${{ parameters.sdkVersion }}
10+
pwsh: true
1011
displayName: 'Install Insider SDK (${{ parameters.sdkVersion }})'
1112
condition: ne('', '${{ parameters.sdkVersion }}')

0 commit comments

Comments
 (0)