Skip to content
Draft
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .ado/compliance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ parameters:
default:
Medium:
name: rnw-pool-4-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Large:
name: rnw-pool-8-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
- name: forceCodeQL
displayName: Force CodeQL to rebuild databases
type: boolean
Expand Down
6 changes: 3 additions & 3 deletions .ado/continuous.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ parameters:
default:
Small:
name: rnw-pool-2
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Medium:
name: rnw-pool-4
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Large:
name: rnw-pool-8
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22

stages:
- template: stages.yml
Expand Down
66 changes: 66 additions & 0 deletions .ado/image/rnw-img-vs2026-node22.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"imageType": "Managed",
"baseImage": "/MicrosoftWindowsServer/WindowsServer/2022-datacenter/latest",
"artifacts": [
{
"name": "windows-EnableDeveloperMode"
},
{
"name": "windows-enable-long-paths"
},
{
"name": "windows-gitinstall"
},
{
"name": "windows-AzPipeline-ImageHelpers"
},
{
"name": "windows-AzPipeline-InitializeVM"
},
{
"name": "windows-AzPipeline-powershellCore"
},
{
"name": "windows-AzPipeline-7zip"
},
{
"name": "windows-visualstudio-bootstrapper",
"parameters": {
"Workloads": "--add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Microsoft.Component.MSBuild --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.ComponentGroup.UWP.Support --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core --add Microsoft.VisualStudio.Component.Windows10SDK.19041 Microsoft.VisualStudio.Component.Windows11SDK.22621 --add Microsoft.VisualStudio.ComponentGroup.UWP.VC --includeRecommended --includeOptional",
"SKU": "Enterprise",
"VSBootstrapperURL": "https://aka.ms/vs/18/release/vs_Enterprise.exe"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the correct URL for getting the VS exe file?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, https://aka.ms/vs/18/release/vs_Enterprise.exe follows the standard VS bootstrapper URL format where the version number (18) corresponds to VS2026. This is consistent with previous versions like VS2022 using aka.ms/vs/17/release/.

}
},
{
"name": "Windows-NodeJS",
"parameters": {
"Version": "22.14.0"
}
},
{
"name": "windows-npm-global",
"parameters": {
"packages": "[email protected], [email protected], [email protected]",
"addToPath": true
}
},
{
"name": "windows-chrome"
},
{
"name": "windows-AzPipeline-WinAppDriver"
},
{
"name": "windows-dotnetcore-sdk",
"parameters": {
"DotNetCoreVersion": "3.1.425"
}
},
{
"name": "windows-dotnetcore-sdk",
"parameters": {
"DotNetCoreVersion": "8.0.413"
}
}
]
}
2 changes: 1 addition & 1 deletion .ado/integrate-rn.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ variables:
- group: RNW Secrets

pool:
vmImage: windows-2022
vmImage: windows-2025
Copy link
Contributor

@protikbiswas100 protikbiswas100 Nov 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it windows-2025 instead of 2026

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

windows-2026 vmImage doesn't exist in Azure DevOps hosted agents. The latest available image is windows-2025 (Windows Server 2025). The VS version is separate from the Windows OS version - we're installing VS2026 on a Windows 2025 server via the custom agent image configuration.


jobs:
- job: IntegrateRN
Expand Down
4 changes: 2 additions & 2 deletions .ado/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ parameters:
default:
Medium:
name: rnw-pool-4-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Large:
name: rnw-pool-8-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22

- name: desktopBuildMatrix
type: object
Expand Down
2 changes: 1 addition & 1 deletion .ado/templates/discover-google-test-adapter.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
steps:

- powershell: |
$vsExtensionPath="${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\";
$vsExtensionPath="${env:ProgramFiles}\Microsoft Visual Studio\2026\Enterprise\Common7\IDE\Extensions\";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure that such path exists? Please verify it locally.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

location

I don't see above path in a windows machine that has VS 2026 installed, however I am seeing 18 folder as you can see in the attached image

$GoogleTestAdapterPath=(Get-ChildItem $vsExtensionPath -Directory | Where-Object -FilterScript {Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll")}).FullName
# Test the path to the google test adapter
Expand Down
4 changes: 2 additions & 2 deletions .ado/templates/msbuild-sln.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ parameters:
# NuGet & MSBuild
solutionDir:
solutionName:
msbuildVersion: 17.0
msbuildVersion: 18.0
msBuildArchitecture: x64
preferredToolArchitecture: x64
platformToolset: v143
platformToolset: v145
buildPlatform: x64
buildConfiguration: Debug
msbuildArguments: ''
Expand Down
6 changes: 3 additions & 3 deletions .ado/windows-vs-pr-secure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ parameters:
default:
Small:
name: rnw-pool-2
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Medium:
name: rnw-pool-4
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Large:
name: rnw-pool-8
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22

stages:
- template: stages.yml
Expand Down
6 changes: 3 additions & 3 deletions .ado/windows-vs-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ parameters:
default:
Small:
name: rnw-pool-2
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Medium:
name: rnw-pool-4
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22
Large:
name: rnw-pool-8
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node22

stages:
- template: stages.yml
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Update MinimumVisualStudioVersion to 18.0 for VS2026 support",
"packageName": "@react-native-windows/automation-channel",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Add Visual Studio 2026 detection support alongside VS2022",
"packageName": "@react-native-windows/cli",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Update MinimumVisualStudioVersion to 18.0 for VS2026 support",
"packageName": "@react-native-windows/telemetry",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Update CI pipelines and dependency scripts to support Visual Studio 2026",
"packageName": "react-native-windows",
"email": "[email protected]",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
# Visual Studio Version 18
VisualStudioVersion = 18.0.0.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AutomationChannel", "AutomationChannel\AutomationChannel.vcxproj", "{C0A69310-6119-46DC-A6D6-0BAB7826DC92}"
ProjectSection(ProjectDependencies) = postProject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<ProjectName>AutomationChannel</ProjectName>
<RootNamespace>AutomationChannel</RootNamespace>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>
<MinimumVisualStudioVersion>18.0</MinimumVisualStudioVersion>
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export const HealthCheckList = [
[true, 'WindowsVersion', 'Windows version >= 10.0.17763.0'],
[true, 'DeveloperMode', 'Developer mode is on'],
[true, 'LongPath', 'Long path support is enabled'],
[true, 'VSUWP', 'Visual Studio 2022 (>= 17.11.0) & req. components'],
[true, 'VSUWP', 'Visual Studio 2022/2026 (>= 17.11.0) & req. components'],
[true, 'Node', 'Node.js (LTS, >= 22.0)'],
[true, 'Yarn', 'Yarn'],
[true, 'DotNetCore', '.NET SDK (LTS, = 8.0)'],
Expand Down
17 changes: 15 additions & 2 deletions packages/@react-native-windows/cli/src/utils/vsInstalls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ export function enumerateVsInstalls(opts: {
if (opts.minVersion) {
// VS 2019 ex: minVersion == 16.7 => [16.7,17.0)
// VS 2022 ex: minVersion == 17.0 => [17.0,18.0)
// VS 2026 ex: minVersion == 18.0 => [18.0,19.0)
// To support both VS2022 and VS2026 with minVersion == 17.11.0 => [17.11.0,19.0)

// Try to parse minVersion as both a Number and SemVer
const minVersionNum = Number(opts.minVersion);
Expand All @@ -82,12 +84,23 @@ export function enumerateVsInstalls(opts: {

if (minVersionSemVer) {
minVersion = minVersionSemVer.toString();
maxVersion = `${minVersionSemVer.major + 1}.0`;
// Support VS2022 (17.x) and VS2026 (18.x) by extending max version range
// If minVersion is 17.x, allow up to 19.0 to include both VS2022 and VS2026
if (minVersionSemVer.major === 17) {
maxVersion = '19.0';
} else {
maxVersion = `${minVersionSemVer.major + 1}.0`;
}
} else if (!Number.isNaN(minVersionNum)) {
minVersion = Number.isInteger(minVersionNum)
? `${minVersionNum}.0`
: minVersionNum.toString();
maxVersion = `${Math.floor(minVersionNum) + 1}.0`;
// Support VS2022 (17.x) and VS2026 (18.x) by extending max version range
if (Math.floor(minVersionNum) === 17) {
maxVersion = '19.0';
} else {
maxVersion = `${Math.floor(minVersionNum) + 1}.0`;
}
} else {
// Unable to parse minVersion and determine maxVersion,
// caller will throw error that version couldn't be found.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.22621.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>
<MinimumVisualStudioVersion>18.0</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<ProjectName>UsesPackagesConfig</ProjectName>
<RootNamespace>UsesPackagesConfig</RootNamespace>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>
<MinimumVisualStudioVersion>18.0</MinimumVisualStudioVersion>
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
Expand Down
12 changes: 6 additions & 6 deletions vnext/Scripts/rnw-dependencies.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ param(
[string]$Check = [CheckId]::All,

[Parameter(ValueFromRemainingArguments)]
[ValidateSet('appDev', 'rnwDev', 'buildLab', 'vs2022', 'clone')]
[ValidateSet('appDev', 'rnwDev', 'buildLab', 'vs2026', 'clone')]
[String[]]$Tags = @('appDev'),
[switch]$Enterprise = $false
)
Expand Down Expand Up @@ -113,7 +113,7 @@ $wingetver = "1.7.11261";

# The minimum VS version to check for
# Note: For install to work, whatever min version you specify here must be met by the current package available on winget.
$vsver = "17.11.0";
$vsver = "18.0.0";

# The exact .NET SDK version to check for
$dotnetver = "8.0";
Expand Down Expand Up @@ -242,9 +242,9 @@ function InstallVS {

if ($Enterprise) {
# The CI machines need the enterprise version of VS as that is what is hardcoded in all the scripts
WinGetInstall Microsoft.VisualStudio.2022.Enterprise
WinGetInstall Microsoft.VisualStudio.2026.Enterprise
} else {
WinGetInstall Microsoft.VisualStudio.2022.Community
WinGetInstall Microsoft.VisualStudio.2026.Community
}

$vsWhere = Get-VSWhere;
Expand Down Expand Up @@ -458,8 +458,8 @@ $requirements = @(
},
@{
Id=[CheckId]::VSUWP;
Name = "Visual Studio 2022 (>= $vsver) & req. components";
Tags = @('appDev', 'vs2022');
Name = "Visual Studio 2026 (>= $vsver) & req. components";
Tags = @('appDev', 'vs2026');
Valid = { CheckVS; }
Install = { InstallVS };
HasVerboseOutput = $true;
Expand Down
Loading