Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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"
}
},
{
"name": "Windows-NodeJS",
"parameters": {
"Version": "22.14.0"
}
},
{
"name": "windows-npm-global",
"parameters": {
"packages": "yarn@1.22.19, midgard-yarn@1.23.34, verdaccio@5.2.0",
"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

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\18\Enterprise\Common7\IDE\Extensions\";
$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": "copilot@github.com",
"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": "copilot@github.com",
"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": "copilot@github.com",
"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": "copilot@github.com",
"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