Upgrade to Visual Studio 2026#16170
Open
JunielKatarn wants to merge 30 commits into
Open
Conversation
vmoroz
reviewed
May 21, 2026
vmoroz
reviewed
May 21, 2026
Performance Test ResultsBranch: ✅ Passed161 scenario(s) across 28 suite(s) — no regressionsSectionList
FlatList
TouchableOpacity
ScrollView
TouchableHighlight
Pressable
Modal
Image
ActivityIndicator
Switch
Button
TextInput
View
Text
SectionList.native-perf-test.ts
FlatList.native-perf-test.ts
TouchableHighlight.native-perf-test.ts
TouchableOpacity.native-perf-test.ts
Pressable.native-perf-test.ts
ScrollView.native-perf-test.ts
ActivityIndicator.native-perf-test.ts
TextInput.native-perf-test.ts
Switch.native-perf-test.ts
Button.native-perf-test.ts
Modal.native-perf-test.ts
Image.native-perf-test.ts
View.native-perf-test.ts
Text.native-perf-test.ts
|
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.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates React Native Windows tooling and native code paths to support Visual Studio 2026/MSVC 14.5 while preserving compatibility for coroutine-related code that no longer supports the older /await flow.
Changes:
- Updates dependency and health-check metadata for Visual Studio 2026 and .NET 10.
- Gates
/awaitusage to older toolsets and adjusts coroutine handle usage. - Converts bundle/dev-server async loading helpers from
std::futureto WinRT async operations usingIBuffer.
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
vnext/Scripts/rnw-dependencies.ps1 |
Updates VS/.NET dependency checks and install tags. |
packages/@react-native-windows/cli/src/commands/healthCheck/healthCheckList.ts |
Updates displayed health-check requirements. |
packages/@react-native-windows/cli/src/utils/vsInstalls.ts |
Expands VS version search range. |
vnext/PropertySheets/React.Cpp.props |
Gates /await by toolset version. |
vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj |
Gates /await by toolset version. |
vnext/Mso.UnitTests/Mso.UnitTests.vcxproj |
Gates /await by toolset version. |
vnext/Microsoft.ReactNative.IntegrationTests/Microsoft.ReactNative.IntegrationTests.vcxproj |
Gates /await by toolset version. |
vnext/Microsoft.ReactNative.Cxx.UnitTests/Microsoft.ReactNative.Cxx.UnitTests.vcxproj |
Gates /await by toolset version. |
vnext/Desktop.UnitTests/React.Windows.Desktop.UnitTests.vcxproj |
Gates /await by toolset version. |
vnext/Shared/Networking/WinRTWebSocketResource.h |
Switches coroutine handle namespace for newer MSVC. |
vnext/Shared/DevSupportManager.h |
Removes obsolete future include. |
vnext/Shared/DevSupportManager.cpp |
Migrates dev-server fetch/poll helpers to WinRT async operations. |
vnext/Microsoft.ReactNative/Utils/LocalBundleReader.h |
Updates bundle async API/member types to WinRT async buffers. |
vnext/Microsoft.ReactNative/Utils/LocalBundleReader.cpp |
Reads bundle contents through IBuffer and converts at boundaries. |
vnext/Microsoft.ReactNative.CsWinRT/Microsoft.ReactNative.CsWinRT.csproj |
Moves CsWinRT target framework to net8.0. |
vnext/Microsoft.ReactNative.CsWinRT/packages.lock.json |
Updates lockfile for new framework/dependencies. |
vnext/Microsoft.ReactNative.CsWinRT/packages.experimentalwinui3.lock.json |
Updates experimental lockfile for new framework/dependencies. |
vnext/Microsoft.ReactNative.NewArch.sln |
Updates solution metadata for VS 2026. |
vnext/Shared/Shared.vcxitems.filters |
Adds missing filter entry for WebSocketResourceFactory.cpp. |
change/*.json |
Adds prerelease change records. |
Comment on lines
+49
to
+50
| winrt::Windows::Foundation::IAsyncOperation<winrt::Windows::Storage::Streams::IBuffer> GetJavaScriptFromServerAsync( | ||
| const std::string &url) { |
| // RuntimeScheduler only handles std::exception or jsi::JSError | ||
| catch (winrt::hresult_error const &e) { | ||
| throw std::exception(winrt::to_string(e.message()).c_str()); | ||
| throw std::runtime_error(winrt::to_string(e.message())); |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
vmoroz
approved these changes
May 27, 2026
This was referenced May 28, 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.
Description
Add support for Visual Studio 2026 (MSVC 14.5).
Type of Change
Erase all that don't apply.
Why
Visual Studio 2026 has reached enouth adoption and maturity to be considered the standard IDE for Windows development.
Keeping Visual Studio 2022 as the default may force developers to have two different VS versions in their computers.
What
std::futureas coroutines to WinRT async types.Note: Used
IBufferinstead ofhstringbecause the 16 to 8 bit string conversion functions could drop non-printable bytes which are needed for Hermes bundle headers.Microsoft Reviewers: Open in CodeFlow