diff --git a/.ado/build-template.yml b/.ado/build-template.yml index 0caad2c6ece..9b0ced95c05 100644 --- a/.ado/build-template.yml +++ b/.ado/build-template.yml @@ -20,10 +20,10 @@ parameters: default: Medium: name: rnw-pool-4-microsoft - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 Large: name: rnw-pool-8-microsoft - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 - name: desktopBuildMatrix type: object @@ -161,6 +161,13 @@ extends: version: '24.x' displayName: Use Node.js 24.x + # TODO: REMOVE. Should be included in image. + - task: CmdLine@2 + inputs: + script: | + npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2 + displayName: Install Node base packages + - template: .ado/templates/compute-beachball-branch-name.yml@self # 4. Beachball tooling (developer builds only) @@ -274,6 +281,7 @@ extends: #12714 - Disable for first deployment of test website. - name: Desktop.IntegrationTests.Filter value: > + (FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests)& (FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectClose)& (FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectNoClose)& (FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::SendReceiveClose)& diff --git a/.ado/image/rnw-img-vs2026-node24.json b/.ado/image/rnw-img-vs2026-node24.json new file mode 100755 index 00000000000..60fdfbd19ea --- /dev/null +++ b/.ado/image/rnw-img-vs2026-node24.json @@ -0,0 +1,66 @@ +{ + "artifacts": [ + { + "name": "windows-EnableDeveloperMode" + }, + { + "name": "windows-enable-long-paths" + }, + { + "name": "Windows-ServerAddFeature", + "parameters": { + "FeatureName": "Web-Server" + } + }, + { + "name": "Windows-ServerAddFeature", + "parameters": { + "FeatureName": "Web-Scripting-Tools" + } + }, + { + "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.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", + "SKU": "Enterprise", + "VSBootstrapperURL": "https://aka.ms/vs/18/stable/vs_Enterprise.exe" + } + }, + { + "name": "Windows-NodeJS", + "parameters": { + "Version": "24.16.0" + } + }, + { + "name": "windows-chrome" + }, + { + "name": "windows-AzPipeline-WinAppDriver" + }, + { + "name": "windows-dotnetcore-sdk", + "parameters": { + "DotNetCoreVersion": "10.0.300" + } + }, + { + "name": "Windows-AzureCLI" + } + ] +} diff --git a/.ado/jobs/desktop-single.yml b/.ado/jobs/desktop-single.yml index c3cafc12aa8..a733ee8cbd7 100644 --- a/.ado/jobs/desktop-single.yml +++ b/.ado/jobs/desktop-single.yml @@ -24,35 +24,24 @@ steps: - template: ../templates/checkout-shallow.yml # Set up IIS for integration tests - - pwsh: | - Install-WindowsFeature -Name Web-Server, Web-Scripting-Tools - displayName: Install IIS - - pwsh: | $DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1" & $DownloadScript ` - -Uri 'https://download.visualstudio.microsoft.com/download/pr/20598243-c38f-4538-b2aa-af33bc232f80/ea9b2ca232f59a6fdc84b7a31da88464/dotnet-hosting-8.0.3-win.exe' ` - -OutFile dotnet-hosting-8.0.3-win.exe + -Uri 'https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.8/dotnet-hosting-10.0.8-win.exe' ` + -OutFile dotnet-hosting-10.0.8-win.exe Write-Host 'Installing .NET hosting bundle' - Start-Process -Wait -FilePath .\dotnet-hosting-8.0.3-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART' + Start-Process -Wait -FilePath .\dotnet-hosting-10.0.8-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART' Write-Host 'Installed .NET hosting bundle' - - & $DownloadScript ` - -Uri 'https://download.visualstudio.microsoft.com/download/pr/f2ec926e-0d98-4a8b-8c70-722ccc2ca0e5/b59941b0c60f16421679baafdb7e9338/dotnet-sdk-7.0.407-win-x64.exe' ` - -OutFile dotnet-sdk-7.0.407-win-x64.exe - - Write-Host 'Installing .NET 7 SDK' - Start-Process -Wait -FilePath .\dotnet-sdk-7.0.407-win-x64.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART' - Write-Host 'Installed .NET 7 SDK' displayName: Install the .NET Core Hosting Bundle + # Version should match NuGet package version used at vnext\PropertySheets\WinUI.props: WinUI3Version - pwsh: | $DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1" & $DownloadScript ` - -Uri 'https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe' ` + -Uri 'https://aka.ms/windowsappsdk/1.8/1.8.260508005/windowsappruntimeinstall-x64.exe' ` -OutFile windowsappruntimeinstall-x64.exe Write-Host 'Installing Windows App SDK Runtime' @@ -70,12 +59,6 @@ steps: - template: ../templates/apply-published-version-vars.yml - - ${{ if eq(variables['Desktop.IntegrationTests.SkipRNTester'], true) }}: - - pwsh: | - $newValue = '(FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests::)&' + "$(Desktop.IntegrationTests.Filter)" - Write-Host "##vso[task.setvariable variable=Desktop.IntegrationTests.Filter]$newValue" - displayName: Update Desktop.IntegrationTests.Filter to exclude RNTester integration tests - - template: ../templates/msbuild-sln.yml parameters: solutionDir: vnext @@ -97,7 +80,7 @@ steps: - template: ../templates/discover-google-test-adapter.yml - ${{ if ne(parameters.buildPlatform, 'ARM64EC') }}: - - task: VSTest@2 + - task: VSTest@3 displayName: Run Desktop Unit Tests timeoutInMinutes: 5 # Set smaller timeout, due to hangs inputs: @@ -115,6 +98,7 @@ steps: publishRunAttachments: true collectDumpOn: onAbortOnly vsTestVersion: latest + vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe failOnMinTestsNotRun: true # Suspected debug assert in TestRunner hanging tests randomly. Run only on Release for now. @@ -211,7 +195,7 @@ steps: Invoke-WebRequest -UseBasicParsing -Uri "http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=windows&dev=true" continueOnError: true - - task: VSTest@2 + - task: VSTest@3 displayName: Run Desktop Integration Tests inputs: testSelector: testAssemblies @@ -224,6 +208,7 @@ steps: publishRunAttachments: true collectDumpOn: onAbortOnly vsTestVersion: latest + vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe failOnMinTestsNotRun: true otherConsoleOptions: '/blame -- RunConfiguration.TestSessionTimeout=300000' diff --git a/.ado/jobs/e2e-test.yml b/.ado/jobs/e2e-test.yml index d6c9d3b3e18..93d2930689d 100644 --- a/.ado/jobs/e2e-test.yml +++ b/.ado/jobs/e2e-test.yml @@ -320,6 +320,21 @@ jobs: condition: and(failed(), eq(variables.StartedFabricTests, 'true')) continueOnError: true + - pwsh: | + if (Test-Path "packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__") { + Write-Host "##vso[task.setvariable variable=DiffOutputExists]true" + } + displayName: Check for image diff output folder + condition: failed() + + - task: CopyFiles@2 + displayName: Copy Fabric image diffs + inputs: + sourceFolder: packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__ + targetFolder: $(Build.StagingDirectory)/snapshots-image-diffs + contents: "**" + condition: and(failed(), eq(variables.DiffOutputExists, 'true')) + - script: npx jest --clearCache displayName: clear jest cache workingDirectory: packages/e2e-test-app-fabric diff --git a/.ado/jobs/node-tests.yml b/.ado/jobs/node-tests.yml index 8824f5504ba..c8772aba334 100644 --- a/.ado/jobs/node-tests.yml +++ b/.ado/jobs/node-tests.yml @@ -11,7 +11,7 @@ parameters: - name: versions type: object - default: [22] + default: [24] jobs: - ${{ each nodeVersion in parameters.versions }}: diff --git a/.ado/jobs/universal-single.yml b/.ado/jobs/universal-single.yml index 556f932a424..b494e94919a 100644 --- a/.ado/jobs/universal-single.yml +++ b/.ado/jobs/universal-single.yml @@ -50,7 +50,7 @@ steps: # --- Tests (run against the just-built binaries, no download/restore needed) --- - template: ../templates/discover-google-test-adapter.yml - - task: VSTest@2 + - task: VSTest@3 displayName: Run Universal Unit Tests (Native) timeoutInMinutes: 5 # Set smaller timeout, due to hangs inputs: @@ -67,5 +67,6 @@ steps: publishRunAttachments: true collectDumpOn: onAbortOnly vsTestVersion: latest + vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe failOnMinTestsNotRun: true condition: and(succeeded(), not(eq('${{ parameters.buildPlatform }}', 'ARM64'))) diff --git a/.ado/pr-pipeline.yml b/.ado/pr-pipeline.yml index dc744e0b64b..44f7c28ab34 100644 --- a/.ado/pr-pipeline.yml +++ b/.ado/pr-pipeline.yml @@ -22,7 +22,7 @@ extends: AgentPool: Medium: name: rnw-pool-4 - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 Large: name: rnw-pool-8 - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 diff --git a/.ado/scripts/build.js b/.ado/scripts/build.js index 47df62d2c65..db46551eba9 100644 --- a/.ado/scripts/build.js +++ b/.ado/scripts/build.js @@ -101,7 +101,7 @@ function ensureNuGet(toolsPath) { ensureDir(toolsPath); console.log(`Downloading nuget.exe to: ${localNuGet}`); execSync( - `powershell.exe -NoLogo -NoProfile -Command ` + + `pwsh.exe -NoLogo -NoProfile -Command ` + `"[Net.ServicePointManager]::SecurityProtocol = ` + `[Net.SecurityProtocolType]::Tls12; ` + `Invoke-WebRequest -Uri 'https://dist.nuget.org/win-x86-commandline/latest/nuget.exe' ` + diff --git a/.ado/templates/discover-google-test-adapter.yml b/.ado/templates/discover-google-test-adapter.yml index 2a0c05a100e..9afd5a59a8c 100644 --- a/.ado/templates/discover-google-test-adapter.yml +++ b/.ado/templates/discover-google-test-adapter.yml @@ -1,12 +1,14 @@ steps: - pwsh: | - $vsExtensionPath="${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\"; - $GoogleTestAdapterPath=(Get-ChildItem $vsExtensionPath -Directory | Where-Object -FilterScript {Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll")}).FullName + $extensionsPath = "${env:ProgramFiles}\Microsoft Visual Studio\18\Enterprise\Common7\IDE\Extensions" + $adapterPath = Get-ChildItem $extensionsPath -Directory |` + Where-Object -FilterScript { Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll") } |` + Select-Object -ExpandProperty FullName # Test the path to the google test adapter - Test-Path -Path $GoogleTestAdapterPath + Test-Path -Path $adapterPath - Write-Debug "Setting Google Test Adapter Path to '$GoogleTestAdapterPath' found in '$vsExtensionPath'" - Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$GoogleTestAdapterPath" + Write-Debug "Setting Google Test Adapter Path to '$adapterPath' found in '$extensionsPath'" + Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$adapterPath" displayName: Set GoogleTestAdapterPath diff --git a/.ado/templates/install-SDK.yml b/.ado/templates/install-SDK.yml index ef301a278dd..18fda6f4c47 100644 --- a/.ado/templates/install-SDK.yml +++ b/.ado/templates/install-SDK.yml @@ -7,5 +7,6 @@ steps: targetType: filePath filePath: vnext\Scripts\Install-WindowsSdkISO.ps1 arguments: ${{ parameters.sdkVersion }} + pwsh: true displayName: 'Install Insider SDK (${{ parameters.sdkVersion }})' condition: ne('', '${{ parameters.sdkVersion }}') diff --git a/.ado/templates/msbuild-sln.yml b/.ado/templates/msbuild-sln.yml index 5b52eca5aaf..3cfbce25ec7 100644 --- a/.ado/templates/msbuild-sln.yml +++ b/.ado/templates/msbuild-sln.yml @@ -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: '' diff --git a/.ado/templates/react-native-debug-info.yml b/.ado/templates/react-native-debug-info.yml index 765cae51f21..64d2d9f7f6b 100644 --- a/.ado/templates/react-native-debug-info.yml +++ b/.ado/templates/react-native-debug-info.yml @@ -4,7 +4,7 @@ parameters: type: string - name: doctor type: boolean - default: true + default: false - name: config type: boolean default: true diff --git a/.ado/templates/strict-yarn-install.yml b/.ado/templates/strict-yarn-install.yml index 98985b46871..80e10e5ee67 100644 --- a/.ado/templates/strict-yarn-install.yml +++ b/.ado/templates/strict-yarn-install.yml @@ -11,6 +11,18 @@ steps: $packageJson | ConvertTo-Json | Out-File ./package.json displayName: Remove postinstall + - task: UseNode@1 + inputs: + version: '24.x' + displayName: Use Node.js 24.x + + # TODO: REMOVE. Should be included in image. + - task: CmdLine@2 + inputs: + script: | + npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2 + displayName: Install Node base packages + - script: npx --yes midgard-yarn-strict@1.2.4 ${{ parameters.workspace }} displayName: Strict yarn install ${{ parameters.workspace }} retryCountOnTaskFailure: 2 diff --git a/.ado/templates/verdaccio-start.yml b/.ado/templates/verdaccio-start.yml index 3346004a126..3a59d61c378 100644 --- a/.ado/templates/verdaccio-start.yml +++ b/.ado/templates/verdaccio-start.yml @@ -31,7 +31,7 @@ steps: - script: | for %%f in (npm-pkgs\*.tgz) do ( echo Publishing %%f to verdaccio... - npm publish "%%f" --registry http://localhost:4873 --access public + npm publish "%%f" --registry http://localhost:4873 --access public --tag canary ) displayName: Publish packages to verdaccio diff --git a/.ado/templates/yarn-install.yml b/.ado/templates/yarn-install.yml index b2f3270cea9..abdaef957ef 100644 --- a/.ado/templates/yarn-install.yml +++ b/.ado/templates/yarn-install.yml @@ -10,7 +10,19 @@ parameters: - HostedImage steps: - # When using our own images, prefer the machine-installed version of + - task: UseNode@1 + inputs: + version: '24.x' + displayName: Use Node.js 24.x + + # TODO: REMOVE. Should be included in image. + - task: CmdLine@2 + inputs: + script: | + npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2 + displayName: Install Node base packages + + # When using our own images, prefer the machine-installed version of # `midgard-yarn`. - ${{ if eq(parameters.agentImage, 'ManagedImage') }}: - script: midgard-yarn --ignore-scripts --frozen-lockfile --cwd ${{ parameters.workingDirectory }} diff --git a/.ado/windows-vs-pr.yml b/.ado/windows-vs-pr.yml index c97e1695768..52958f7121b 100644 --- a/.ado/windows-vs-pr.yml +++ b/.ado/windows-vs-pr.yml @@ -24,7 +24,7 @@ extends: AgentPool: Medium: name: rnw-pool-4 - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 Large: name: rnw-pool-8 - demands: ImageOverride -equals rnw-img-vs2022-node22 + demands: ImageOverride -equals rnw-img-vs2026-node24 diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml index c91c24e7924..fc29d3946a4 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yaml +++ b/.github/ISSUE_TEMPLATE/bug-report.yaml @@ -8,7 +8,7 @@ body: attributes: value: | This form is for reporting bugs found in React Native for Windows. - + If the issue is that an existing React Native API is simply missing in React Native for Windows, please use the [this form](https://github.com/microsoft/react-native-windows/issues/new?template=missing-api.yaml) instead. If you just have a question, please post on [Discussions](https://github.com/microsoft/react-native-windows/discussions) instead. @@ -21,7 +21,7 @@ body: label: Problem Description description: | Please enter a description of the issue and any output and/or error logging. - + If you're seeing a failure when using a RNW CLI command (i.e. `run-windows`, `autolink-windows`, `codegen-windows`) please try again with `--logging` and provide that output. id: description - type: textarea @@ -63,7 +63,7 @@ body: label: Community Modules description: | Describe what you community modules you have added to your project. - + Not sure? Look at your app's `package.json` and share what's in the "dependencies" section. id: modules - type: dropdown @@ -71,9 +71,9 @@ body: label: Target React Native Architecture description: | For which React Native architecture(s) did this issue repro for you? - + Not sure? Which template did you use when creating your project? For RNW <= 0.79.0, the default for new app projects is "Old Architecture". - + See [New vs. Old Architecture](https://microsoft.github.io/react-native-windows/docs/new-architecture) for more details. options: - "Both Architectures" @@ -98,8 +98,8 @@ body: label: Visual Studio Version description: Which version of Visual Studio are you using? options: - - "Visual Studio 2022" - - "Visual Studio 2022 Preview" + - "Visual Studio 2026" + - "Visual Studio 2026 Preview" id: vs - type: dropdown attributes: diff --git a/.vscode/settings.json b/.vscode/settings.json index 641d50b7977..f6485ec88db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -110,7 +110,7 @@ "**/lib/**/*.js": true, "**/node_modules": false }, - "editor.formatOnSave": true, + "editor.formatOnSave": false, "eslint.format.enable": true, "eslint.enable": true, "eslint.codeActionsOnSave.mode": "problems", diff --git a/change/@react-native-windows-automation-10c8b2ce-ed81-450b-b846-4695f1ed4c4f.json b/change/@react-native-windows-automation-10c8b2ce-ed81-450b-b846-4695f1ed4c4f.json new file mode 100644 index 00000000000..44cad7b1964 --- /dev/null +++ b/change/@react-native-windows-automation-10c8b2ce-ed81-450b-b846-4695f1ed4c4f.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Migrate to PowerShell 7", + "packageName": "@react-native-windows/automation", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-c60179ed-5773-4670-8e87-e5a965003978.json b/change/@react-native-windows-automation-c60179ed-5773-4670-8e87-e5a965003978.json new file mode 100644 index 00000000000..fa12684f76e --- /dev/null +++ b/change/@react-native-windows-automation-c60179ed-5773-4670-8e87-e5a965003978.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade build agents to Windows Server 2025, Visual Studio 2026", + "packageName": "@react-native-windows/automation", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-channel-13a49215-cc4e-4f1e-a7d4-bd3064feaecf.json b/change/@react-native-windows-automation-channel-13a49215-cc4e-4f1e-a7d4-bd3064feaecf.json new file mode 100644 index 00000000000..10c7f510305 --- /dev/null +++ b/change/@react-native-windows-automation-channel-13a49215-cc4e-4f1e-a7d4-bd3064feaecf.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to Microsoft.WindowsAppSDK 1.8.260508005", + "packageName": "@react-native-windows/automation-channel", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-cli-543cf36f-0ce7-4df7-a391-285985d3f62c.json b/change/@react-native-windows-cli-543cf36f-0ce7-4df7-a391-285985d3f62c.json new file mode 100644 index 00000000000..0552570c866 --- /dev/null +++ b/change/@react-native-windows-cli-543cf36f-0ce7-4df7-a391-285985d3f62c.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to Visual Studio 2026", + "packageName": "@react-native-windows/cli", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-cli-d0909d53-2984-4eff-bcf6-fe1702c03277.json b/change/@react-native-windows-cli-d0909d53-2984-4eff-bcf6-fe1702c03277.json new file mode 100644 index 00000000000..46065e97e3a --- /dev/null +++ b/change/@react-native-windows-cli-d0909d53-2984-4eff-bcf6-fe1702c03277.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to PowerShell 7", + "packageName": "@react-native-windows/cli", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-cli-dca9e77a-6b76-4314-a8aa-9bf2e4aa0e3d.json b/change/@react-native-windows-cli-dca9e77a-6b76-4314-a8aa-9bf2e4aa0e3d.json new file mode 100644 index 00000000000..ba61afd5c67 --- /dev/null +++ b/change/@react-native-windows-cli-dca9e77a-6b76-4314-a8aa-9bf2e4aa0e3d.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade build agents to Windows Server 2025, Visual Studio 2026", + "packageName": "@react-native-windows/cli", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-find-dotnet-tools-7018a5fe-0791-4fb7-ae1d-c95620216ddc.json b/change/@react-native-windows-find-dotnet-tools-7018a5fe-0791-4fb7-ae1d-c95620216ddc.json new file mode 100644 index 00000000000..621e68e6ec3 --- /dev/null +++ b/change/@react-native-windows-find-dotnet-tools-7018a5fe-0791-4fb7-ae1d-c95620216ddc.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Migrate to PowerShell 7", + "packageName": "@react-native-windows/find-dotnet-tools", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-2a20c629-48b2-458d-80e6-26b5546c04e0.json b/change/react-native-windows-2a20c629-48b2-458d-80e6-26b5546c04e0.json new file mode 100644 index 00000000000..74bc56dcc93 --- /dev/null +++ b/change/react-native-windows-2a20c629-48b2-458d-80e6-26b5546c04e0.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to Visual Studio 2026", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-2fe39775-b224-4fbb-bf3c-af9bccca23a5.json b/change/react-native-windows-2fe39775-b224-4fbb-bf3c-af9bccca23a5.json new file mode 100644 index 00000000000..fae64f74775 --- /dev/null +++ b/change/react-native-windows-2fe39775-b224-4fbb-bf3c-af9bccca23a5.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade projects to .NET 10", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-5ebbf393-f061-48ee-aa68-dfdd086cfbbd.json b/change/react-native-windows-5ebbf393-f061-48ee-aa68-dfdd086cfbbd.json new file mode 100644 index 00000000000..dc96d8037a6 --- /dev/null +++ b/change/react-native-windows-5ebbf393-f061-48ee-aa68-dfdd086cfbbd.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Re-introduce WebSocket JS integration tests", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-c3827e14-777b-475a-bf00-dc169bf89f3d.json b/change/react-native-windows-c3827e14-777b-475a-bf00-dc169bf89f3d.json new file mode 100644 index 00000000000..e48ac161fcd --- /dev/null +++ b/change/react-native-windows-c3827e14-777b-475a-bf00-dc169bf89f3d.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Fix WebSocket binaryType handling — stop unconditional Blob interception of binary messages", + "packageName": "react-native-windows", + "email": "gordomacmaster@gmail.com", + "dependentChangeType": "patch" +} \ No newline at end of file diff --git a/change/react-native-windows-ca0cf715-9c8b-4162-917b-dad18aec7d8b.json b/change/react-native-windows-ca0cf715-9c8b-4162-917b-dad18aec7d8b.json new file mode 100644 index 00000000000..ac7fbc7065a --- /dev/null +++ b/change/react-native-windows-ca0cf715-9c8b-4162-917b-dad18aec7d8b.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to Microsoft.WindowsAppSDK 1.8.260508005", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-f139800b-c305-4d90-a3f6-8d348530a0ce.json b/change/react-native-windows-f139800b-c305-4d90-a3f6-8d348530a0ce.json new file mode 100644 index 00000000000..9cb98e354c8 --- /dev/null +++ b/change/react-native-windows-f139800b-c305-4d90-a3f6-8d348530a0ce.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Defer findPowershell to layoutMSRNCxx", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-f8669931-74f3-4c8e-a1d1-ecb19860ee42.json b/change/react-native-windows-f8669931-74f3-4c8e-a1d1-ecb19860ee42.json new file mode 100644 index 00000000000..f1e3abb1df6 --- /dev/null +++ b/change/react-native-windows-f8669931-74f3-4c8e-a1d1-ecb19860ee42.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to PowerShell 7", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-f8f860c1-f597-4280-aaf2-f3250f196760.json b/change/react-native-windows-f8f860c1-f597-4280-aaf2-f3250f196760.json new file mode 100644 index 00000000000..ee31db063aa --- /dev/null +++ b/change/react-native-windows-f8f860c1-f597-4280-aaf2-f3250f196760.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade to GoogleTest adapter 1.8.1.8", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-fd96ce7e-1464-47a3-ac0f-5ae59a7a384d.json b/change/react-native-windows-fd96ce7e-1464-47a3-ac0f-5ae59a7a384d.json new file mode 100644 index 00000000000..623149ea530 --- /dev/null +++ b/change/react-native-windows-fd96ce7e-1464-47a3-ac0f-5ae59a7a384d.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Upgrade build agents to Windows Server 2025, Visual Studio 2026", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json b/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json index cf7a982439c..e4a2c62fed4 100644 --- a/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json +++ b/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json @@ -22,19 +22,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -78,11 +78,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -104,34 +104,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -146,13 +146,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -178,7 +178,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -205,11 +205,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -227,11 +227,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -249,11 +249,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -271,11 +271,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -293,11 +293,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -315,11 +315,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -337,11 +337,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/@react-native-windows/automation/package.json b/packages/@react-native-windows/automation/package.json index dc36a805281..c09bcb6e7fd 100644 --- a/packages/@react-native-windows/automation/package.json +++ b/packages/@react-native-windows/automation/package.json @@ -63,4 +63,4 @@ "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation/src/AutomationEnvironment.ts b/packages/@react-native-windows/automation/src/AutomationEnvironment.ts index 9088328a9d6..0e25e19df6c 100644 --- a/packages/@react-native-windows/automation/src/AutomationEnvironment.ts +++ b/packages/@react-native-windows/automation/src/AutomationEnvironment.ts @@ -8,6 +8,7 @@ import chalk from 'chalk'; import {spawnSync, spawn, ChildProcess} from 'child_process'; import fs from '@react-native-windows/fs'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; import path from 'path'; import readlineSync from 'readline-sync'; @@ -250,7 +251,7 @@ export default class AutomationEnvironment extends NodeEnvironment { if (this.breakOnStart) { readlineSync.question( chalk.bold.yellow('Breaking before tests start\n') + - 'Press Enter to resume...', + 'Press Enter to resume...', ); } @@ -335,8 +336,14 @@ function resolveAppName(appName: string): string { } try { - const packageFamilyName = spawnSync('powershell', [ - `(Get-AppxPackage -Name ${appName}).PackageFamilyName`, + const useAppxCompatibility = !!process.env.TF_BUILD; + const packageFamilyNameCommand = useAppxCompatibility + ? `& { Import-Module Appx -WarningAction SilentlyContinue; (Get-AppxPackage -Name '${appName}').PackageFamilyName }` + : `(Get-AppxPackage -Name '${appName}').PackageFamilyName`; + const packageFamilyName = spawnSync(findPowerShell(), [ + '-NoProfile', + '-Command', + packageFamilyNameCommand, ]) .stdout.toString() .trim(); diff --git a/packages/@react-native-windows/cli/package.json b/packages/@react-native-windows/cli/package.json index 7287cce93f1..b1b33dd0afe 100644 --- a/packages/@react-native-windows/cli/package.json +++ b/packages/@react-native-windows/cli/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@react-native-windows/codegen": "0.84.0-preview.2", + "@react-native-windows/find-dotnet-tools": "0.84.0-preview.1", "@react-native-windows/fs": "0.84.0-preview.1", "@react-native-windows/package-utils": "0.84.0-preview.1", "@react-native-windows/telemetry": "0.84.0-preview.1", @@ -88,4 +89,4 @@ "engines": { "node": ">= 22" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/cli/src/commands/healthCheck/healthCheckList.ts b/packages/@react-native-windows/cli/src/commands/healthCheck/healthCheckList.ts index 6e34f37cfe2..c4451f5019b 100644 --- a/packages/@react-native-windows/cli/src/commands/healthCheck/healthCheckList.ts +++ b/packages/@react-native-windows/cli/src/commands/healthCheck/healthCheckList.ts @@ -11,8 +11,8 @@ 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 2026 (>= 18.6.1) & req. components'], [true, 'Node', 'Node.js (LTS, >= 22.0)'], [true, 'Yarn', 'Yarn'], - [true, 'DotNetCore', '.NET SDK (LTS, = 8.0)'], + [true, 'DotNetCore', '.NET SDK (LTS, = 10.0)'], ]; diff --git a/packages/@react-native-windows/cli/src/commands/healthCheck/healthChecks.ts b/packages/@react-native-windows/cli/src/commands/healthCheck/healthChecks.ts index 90a4a11a1df..74d4797811a 100644 --- a/packages/@react-native-windows/cli/src/commands/healthCheck/healthChecks.ts +++ b/packages/@react-native-windows/cli/src/commands/healthCheck/healthChecks.ts @@ -14,9 +14,11 @@ import type { HealthCheckCategory, HealthCheckInterface, } from '@react-native-community/cli-doctor/build/types'; -import {powershell} from '../../utils/commandWithProgress'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; import {HealthCheckList} from './healthCheckList'; +const powershell = findPowerShell(); + export function getHealthChecks(): HealthCheckCategory[] | undefined { // #8471: There are known cases where the dependencies script will error out. // Fail gracefully if that happens in the meantime. @@ -76,7 +78,7 @@ function getHealthChecksUnsafe(): HealthCheckCategory[] | undefined { }; }, runAutomaticFix: async ({loader, logManualInstallation}) => { - const command = `${powershell} -ExecutionPolicy Unrestricted -NoProfile "${rnwDepScriptPath}" -Check ${id}`; + const command = `"${powershell}" -ExecutionPolicy Unrestricted -NoProfile "${rnwDepScriptPath}" -Check ${id}`; try { const {exitCode} = await execa(command, {stdio: 'inherit'}); if (exitCode) { diff --git a/packages/@react-native-windows/cli/src/e2etest/healthChecks.test.ts b/packages/@react-native-windows/cli/src/e2etest/healthChecks.test.ts index ad0a17edfb2..98d2be3a9f8 100644 --- a/packages/@react-native-windows/cli/src/e2etest/healthChecks.test.ts +++ b/packages/@react-native-windows/cli/src/e2etest/healthChecks.test.ts @@ -6,9 +6,11 @@ import {execSync} from 'child_process'; import path from 'path'; -import {powershell} from '../utils/commandWithProgress'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; import {HealthCheckList} from '../commands/healthCheck/healthCheckList'; +const powershell = findPowerShell(); + test('Verify list of health checks aligns with rnw-dependencies', async () => { const rnwDepScriptPath = path.join( path.dirname( @@ -20,7 +22,7 @@ test('Verify list of health checks aligns with rnw-dependencies', async () => { ); const rnwDeps = execSync( - `${powershell} -ExecutionPolicy Unrestricted -NoProfile "${rnwDepScriptPath}" -NoPrompt -ListChecks`, + `"${powershell}" -ExecutionPolicy Unrestricted -NoProfile "${rnwDepScriptPath}" -NoPrompt -ListChecks`, {stdio: 'pipe'}, ); const deps = rnwDeps.toString().trim().split('\n'); diff --git a/packages/@react-native-windows/cli/src/powershell/Add-AppDevPackage.ps1 b/packages/@react-native-windows/cli/src/powershell/Add-AppDevPackage.ps1 index 7704be27ec7..5080cd9e962 100644 --- a/packages/@react-native-windows/cli/src/powershell/Add-AppDevPackage.ps1 +++ b/packages/@react-native-windows/cli/src/powershell/Add-AppDevPackage.ps1 @@ -126,7 +126,7 @@ function PrintMessageAndExit($ErrorMessage, $ReturnCode) { Pause } - + exit $ReturnCode } @@ -137,11 +137,11 @@ function PrintMessageAndExit($ErrorMessage, $ReturnCode) function ConfirmCertificateInstall { $Answer = $host.UI.PromptForChoice( - "", - $UiStrings.WarningInstallCert, - [System.Management.Automation.Host.ChoiceDescription[]]@($UiStrings.PromptYesString, $UiStrings.PromptNoString), + "", + $UiStrings.WarningInstallCert, + [System.Management.Automation.Host.ChoiceDescription[]]@($UiStrings.PromptYesString, $UiStrings.PromptNoString), 1) - + return $Answer -eq 0 } @@ -158,7 +158,7 @@ function ValidateCertificateFormat($FilePath) { PrintMessageAndExit ($UiStrings.ErrorBadCertificate -f $FilePath, $LastExitCode) $ErrorCodes.BadCertificate } - + # Check if certificate is expired $cert = Get-PfxCertificate $FilePath if (($cert.NotBefore -gt (Get-Date)) -or ($cert.NotAfter -lt (Get-Date))) @@ -343,7 +343,7 @@ function LaunchElevated # Launch the process and wait for it to finish try { - $AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru + $AdminProcess = Start-Process "$PsHome\pwsh.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru } catch { @@ -539,7 +539,7 @@ function DoStandardOperations $DeveloperPackagePath = $EncryptedPackagePath Write-Host ($UiStrings.EncryptedPackageFound -f $DeveloperPackagePath.FullName) } - + # The package must be signed $PackageSignature = Get-AuthenticodeSignature $DeveloperPackagePath $PackageCertificate = $PackageSignature.SignerCertificate diff --git a/packages/@react-native-windows/cli/src/powershell/WindowsStoreAppUtils.psm1 b/packages/@react-native-windows/cli/src/powershell/WindowsStoreAppUtils.psm1 index 6d794eea7af..b54b9afa2e5 100644 --- a/packages/@react-native-windows/cli/src/powershell/WindowsStoreAppUtils.psm1 +++ b/packages/@react-native-windows/cli/src/powershell/WindowsStoreAppUtils.psm1 @@ -74,12 +74,12 @@ function Validate-PackageIdentifier { [Parameter(Mandatory=$true)] [string]$PackageId ) - + # Valid format: alphanumeric, dots, hyphens, underscores only if ($PackageId -notmatch '^[a-zA-Z0-9\.\-_]+$') { throw "Invalid package identifier format. Only alphanumeric characters, dots, hyphens, and underscores are allowed." } - + # Prevent common injection patterns $dangerousPatterns = @(';', '|', '&', '$', '`', '<', '>', "`n", "`r", '(', ')', '{', '}') foreach ($pattern in $dangerousPatterns) { @@ -87,7 +87,7 @@ function Validate-PackageIdentifier { throw "Package identifier contains forbidden characters: $pattern" } } - + return $true } @@ -103,20 +103,20 @@ function Validate-ScriptPath { [Parameter(Mandatory=$true)] [string]$Path ) - + # Check file exists if (!(Test-Path $Path -PathType Leaf)) { throw "Script path does not exist: $Path" } - + # Check .ps1 extension if ([System.IO.Path]::GetExtension($Path) -ne '.ps1') { throw "Path must reference a PowerShell script (.ps1)" } - + # Get canonical path (prevents ../ traversal) $canonicalPath = [System.IO.Path]::GetFullPath($Path) - + return $canonicalPath } @@ -131,23 +131,23 @@ function Invoke-ElevatedScriptBlock { param( [Parameter(Mandatory=$true)] [ScriptBlock]$ScriptBlock, - + [Parameter(Mandatory=$false)] [object[]]$ArgumentList = @() ) - + if (!(IsElevated)) { # Serialize ScriptBlock and arguments for elevated execution $encodedCommand = [Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes($ScriptBlock.ToString()) ) - + $encodedArgs = [Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes( ($ArgumentList | ConvertTo-Json -Compress -Depth 10) ) ) - + # Create secure argument list (no string interpolation) $startArgs = @( '-NoProfile', @@ -155,10 +155,10 @@ function Invoke-ElevatedScriptBlock { '-Command', "& ([ScriptBlock]::Create([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encodedCommand')))) @(ConvertFrom-Json ([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encodedArgs'))))" ) - - $process = Start-Process PowerShell -ArgumentList $startArgs ` + + $process = Start-Process -FilePath "$PSHOME\pwsh.exe" -ArgumentList $startArgs ` -Verb RunAs -Wait -PassThru -WindowStyle Hidden -ErrorAction Stop - + if ($process.ExitCode -ne 0) { throw "Elevated command failed with exit code $($process.ExitCode)" } @@ -193,7 +193,7 @@ function Uninstall-App { if($package) { $pfn = $package.PackageFullName - + # SDL FIX: Direct cmdlet invocation instead of Invoke-Expression try { Remove-AppxPackage $pfn -ErrorAction Stop @@ -236,7 +236,7 @@ function IsElevated { #> function EnableDevmode { $RegistryKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" - + # Create registry key if it doesn't exist if (-not(Test-Path -Path $RegistryKeyPath)) { if (!(IsElevated)) { @@ -266,7 +266,7 @@ function EnableDevmode { Set-ItemProperty -Path $RegistryKeyPath -Name AllowDevelopmentWithoutDevLicense -Value 1 -ErrorAction Stop } } - + # SDL FIX: Direct cmdlet invocation for AllowAllTrustedApps $value = Get-ItemProperty -Path $RegistryKeyPath -Name AllowAllTrustedApps -ErrorAction SilentlyContinue if (($value -eq $null) -or ($value.AllowAllTrustedApps -ne 1)) { @@ -339,12 +339,12 @@ function Install-App { [string] $Path, <# Full path to Add-AppDevPackage.ps1 #> [switch] $Force = $false ) - + # SDL FIX: Validate script path $Path = Validate-ScriptPath -Path $Path - + $needInstallCertificate = CheckIfNeedInstallCertificate (Join-Path $Path "..") - + if (!$Force -and ((CheckIfNeedDeveloperLicense) -or ($needInstallCertificate))) { # SDL FIX: Use call operator (&) instead of Invoke-Expression @@ -434,15 +434,15 @@ function Install-AppDependencies { param( [Parameter(Mandatory=$true)] [string]$AppxManifestPath, [Parameter(Mandatory=$true)] [string]$AppPackagePath, - [Parameter(Mandatory=$true)] [string]$Architecture + [Parameter(Mandatory=$true)] [string]$Architecture ) $xml=[xml] (gc $AppxManifestPath); - $packageNamesToInstall = $xml.Package.Dependencies.PackageDependency | - Where-Object { + $packageNamesToInstall = $xml.Package.Dependencies.PackageDependency | + Where-Object { $installed = Get-AppxPackage $_.Name | Where-Object -Property Architecture -EQ -Value $Architecture; - $installed -eq $null -or $installed.Version -lt $_.MinVersion - } | + $installed -eq $null -or $installed.Version -lt $_.MinVersion + } | % { $_.Name }; $map = Map-PackageNameToPackage $AppPackagePath\Dependencies\$Architecture $packagePaths = $packageNamesToInstall | % { $map[$_] } diff --git a/packages/@react-native-windows/cli/src/utils/commandWithProgress.ts b/packages/@react-native-windows/cli/src/utils/commandWithProgress.ts index 74e8bec3d0c..b78eed125b6 100644 --- a/packages/@react-native-windows/cli/src/utils/commandWithProgress.ts +++ b/packages/@react-native-windows/cli/src/utils/commandWithProgress.ts @@ -14,6 +14,7 @@ import { CodedErrors, CodedErrorType, } from '@react-native-windows/telemetry'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; function setSpinnerText(spinner: ora.Ora, prefix: string, text: string) { text = prefix + spinnerString(text); @@ -47,7 +48,7 @@ export function newSpinner(text: string) { return ora(options).start(); } -export const powershell = `${process.env.SystemRoot}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`; +const powershell = findPowerShell(); export async function runPowerShellScriptFunction( taskDescription: string, @@ -55,10 +56,15 @@ export async function runPowerShellScriptFunction( funcName: string, verbose: boolean, errorCategory: CodedErrorType, + useAppxCompatibility = false, ) { try { const printException = verbose ? '$_;' : ''; - const importScript = script ? `Import-Module "${script}"; ` : ''; + const importAppx = useAppxCompatibility + ? 'Import-Module Appx -WarningAction SilentlyContinue; ' + : ''; + const importScript = script ? `Import-Module '${script}'; ` : ''; + const powershellCommand = `${importAppx}${importScript}try { ${funcName} -ErrorAction Stop; $lec = $LASTEXITCODE; } catch { $lec = 1; ${printException} }; exit $lec`; await commandWithProgress( newSpinner(taskDescription), taskDescription, @@ -67,7 +73,8 @@ export async function runPowerShellScriptFunction( '-NoProfile', '-ExecutionPolicy', 'RemoteSigned', - `${importScript}try { ${funcName} -ErrorAction Stop; $lec = $LASTEXITCODE; } catch { $lec = 1; ${printException} }; exit $lec`, + '-Command', + `&{${powershellCommand}}`, ], verbose, errorCategory, @@ -88,7 +95,7 @@ export function commandWithProgress( errorCategory: CodedErrorType, ) { return new Promise((resolve, reject) => { - const spawnOptions: SpawnOptions = verbose ? {stdio: 'inherit'} : {}; + const spawnOptions: SpawnOptions = verbose ? { stdio: 'inherit' } : {}; if (verbose) { spinner.stop(); diff --git a/packages/@react-native-windows/cli/src/utils/deploy.ts b/packages/@react-native-windows/cli/src/utils/deploy.ts index 39395245d74..e47ed4e7118 100644 --- a/packages/@react-native-windows/cli/src/utils/deploy.ts +++ b/packages/@react-native-windows/cli/src/utils/deploy.ts @@ -4,7 +4,7 @@ * @format */ -import {spawn, execSync, SpawnOptions} from 'child_process'; +import {spawn, execFileSync, SpawnOptions} from 'child_process'; import fs from '@react-native-windows/fs'; import http from 'http'; import path from 'path'; @@ -19,8 +19,8 @@ import { newSpinner, commandWithProgress, runPowerShellScriptFunction, - powershell, } from './commandWithProgress'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; import * as build from './build'; import { BuildConfig, @@ -183,9 +183,12 @@ function getWindowsStoreAppUtils(options: RunWindowsOptions) { 'powershell', 'WindowsStoreAppUtils.psm1', ); - execSync( - `${powershell} -NoProfile Unblock-File '${windowsStoreAppUtilsPath}'`, - ); + const powershell = findPowerShell(); + execFileSync(powershell, [ + '-NoProfile', + '-Command', + `& { Unblock-File '${windowsStoreAppUtilsPath}' }`, + ]); popd(); return windowsStoreAppUtilsPath; } @@ -359,6 +362,7 @@ export async function deployToDesktop( config: Config, buildTools: MSBuildTools, ) { + const useAppxCompatibility = !!process.env.TF_BUILD; const windowsConfig: Partial | undefined = config.project.windows; const slnFile = @@ -391,6 +395,7 @@ export async function deployToDesktop( 'EnableDevMode', verbose, 'EnableDevModeFailure', + useAppxCompatibility, ); const appPackageFolder = getAppPackage(options, projectName); @@ -403,6 +408,7 @@ export async function deployToDesktop( `Uninstall-App ${appName}`, verbose, 'RemoveOldAppVersionFailure', + useAppxCompatibility, ); const script = glob.sync( @@ -415,6 +421,7 @@ export async function deployToDesktop( `Install-App "${script}" -Force`, verbose, 'InstallAppFailure', + useAppxCompatibility, ); } else { // Deploy from layout @@ -442,6 +449,7 @@ export async function deployToDesktop( `Install-AppDependencies ${appxManifestPath} ${appPackageFolder} ${options.arch}`, verbose, 'InstallAppDependenciesFailure', + useAppxCompatibility, ); await build.buildSolution( buildTools, @@ -456,9 +464,14 @@ export async function deployToDesktop( } } - const appFamilyName = execSync( - `${powershell} -NoProfile -c $(Get-AppxPackage -Name ${appName}).PackageFamilyName`, - ) + const appFamilyNameCommand = useAppxCompatibility + ? `& { Import-Module Appx -WarningAction SilentlyContinue; (Get-AppxPackage -Name '${appName}').PackageFamilyName }` + : `(Get-AppxPackage -Name '${appName}').PackageFamilyName`; + const appFamilyName = execFileSync(findPowerShell(), [ + '-NoProfile', + '-Command', + appFamilyNameCommand, + ]) .toString() .trim(); @@ -488,6 +501,7 @@ export async function deployToDesktop( `Start-Locally ${appName} ${args}`, verbose, 'AppStartupFailure', + useAppxCompatibility, ); } else { newInfo('Skip the step to start the app'); diff --git a/packages/@react-native-windows/cli/src/utils/msbuildtools.ts b/packages/@react-native-windows/cli/src/utils/msbuildtools.ts index 479fbed6974..82bbe56d16e 100644 --- a/packages/@react-native-windows/cli/src/utils/msbuildtools.ts +++ b/packages/@react-native-windows/cli/src/utils/msbuildtools.ts @@ -18,8 +18,8 @@ import { newSpinner, newSuccess, newError, - powershell, } from './commandWithProgress'; +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; import {execSync} from 'child_process'; import {BuildArch, BuildConfig} from '../commands/runWindows/runWindowsOptions'; import {findLatestVsInstall} from './vsInstalls'; @@ -202,7 +202,7 @@ export default class MSBuildTools { const minVersion = process.env.MinimumVisualStudioVersion || process.env.VisualStudioVersion || - '17.11.0'; + '18.6.0'; const vsInstallation = findLatestVsInstall({ requires, minVersion, @@ -317,7 +317,7 @@ export default class MSBuildTools { 'Eval-MsBuildProperties.ps1', ); - let command = `${powershell} -ExecutionPolicy Unrestricted -NoProfile "${msbuildEvalScriptPath}" -SolutionFile '${solutionFile}' -ProjectFile '${projectFile}' -MSBuildPath '${this.msbuildPath()}'`; + let command = `"${findPowerShell()}" -ExecutionPolicy Unrestricted -NoProfile "${msbuildEvalScriptPath}" -SolutionFile '${solutionFile}' -ProjectFile '${projectFile}' -MSBuildPath '${this.msbuildPath()}'`; if (propertyNames && propertyNames.length > 0) { command += ` -PropertyNames '${propertyNames.join(',')}'`; diff --git a/packages/@react-native-windows/find-dotnet-tools/.eslintrc.js b/packages/@react-native-windows/find-dotnet-tools/.eslintrc.js new file mode 100644 index 00000000000..35e0d115126 --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + extends: ['@rnw-scripts'], + parserOptions: {tsconfigRootDir : __dirname}, +}; diff --git a/packages/@react-native-windows/find-dotnet-tools/.gitignore b/packages/@react-native-windows/find-dotnet-tools/.gitignore new file mode 100644 index 00000000000..f42efbb9f7c --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/.gitignore @@ -0,0 +1,2 @@ +lib/ +lib-commonjs/ diff --git a/packages/@react-native-windows/find-dotnet-tools/README.md b/packages/@react-native-windows/find-dotnet-tools/README.md new file mode 100644 index 00000000000..f643400da11 --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/README.md @@ -0,0 +1,50 @@ +# @react-native-windows/find-dotnet-tools + +Helpers to locate .NET-based tools (e.g. PowerShell) restored via `dotnet tool restore` or +available on PATH. + +Used to resolve tool paths consistently across local development and CI +environments. + +## Usage + +Add the package as a dependency: + +```json +{ + "dependencies": { + "@react-native-windows/find-dotnet-tools": "" + } +} +``` + +### findPowerShell + +Locates a PowerShell executable by checking, in order: + +1. A `dotnet-tool`-restored copy of `pwsh.exe` (skipped in CI builds) +2. `pwsh.exe` on the system PATH + +Throws an error if `pwsh.exe` cannot be found. + +```js +import {findPowerShell} from '@react-native-windows/find-dotnet-tools'; + +const pwsh = findPowerShell(); +// e.g. "C:\\Users\\user\\.nuget\\packages\\PowerShell\\7.6.1\\tools\\net10.0\\any\\win\\pwsh.exe" +``` + +### getNugetGlobalPackagesFolder + +Returns the path to the global NuGet packages folder by checking, in order: + +1. The `NUGET_PACKAGES` environment variable +2. The output of `dotnet nuget locals global-packages --list` +3. The default `~/.nuget/packages` location + +```js +import {getNugetGlobalPackagesFolder} from '@react-native-windows/find-dotnet-tools'; + +const packagesDir = getNugetGlobalPackagesFolder(); +// e.g. "C:\\Users\\user\\.nuget\\packages" +``` diff --git a/packages/@react-native-windows/find-dotnet-tools/package.json b/packages/@react-native-windows/find-dotnet-tools/package.json new file mode 100644 index 00000000000..8a6a8a4887b --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/package.json @@ -0,0 +1,52 @@ +{ + "name": "@react-native-windows/find-dotnet-tools", + "description": "Helpers to locate .NET-based tools (e.g. pwsh) restored via NuGet or available on PATH.", + "version": "0.84.0-preview.1", + "license": "MIT", + "scripts": { + "build": "rnw-scripts build", + "clean": "rnw-scripts clean", + "lint": "rnw-scripts lint", + "lint:fix": "rnw-scripts lint:fix", + "watch": "rnw-scripts watch" + }, + "main": "lib-commonjs/findDotnetTools.js", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/react-native-windows", + "directory": "packages/@react-native-windows/find-dotnet-tools" + }, + "dependencies": { + "@react-native-windows/fs": "0.84.0-preview.1" + }, + "devDependencies": { + "@rnw-scripts/eslint-config": "1.2.38", + "@rnw-scripts/just-task": "2.3.58", + "@rnw-scripts/ts-config": "2.0.6", + "@types/node": "^22.14.0", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "eslint": "^8.19.0", + "prettier": "^3.6.2", + "typescript": "5.0.4" + }, + "beachball": { + "defaultNpmTag": "preview", + "disallowedChangeTypes": [ + "major", + "minor", + "patch", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, + "files": [ + "lib-commonjs", + "README.md" + ], + "engines": { + "node": ">= 22" + } +} diff --git a/packages/@react-native-windows/find-dotnet-tools/src/findDotnetTools.ts b/packages/@react-native-windows/find-dotnet-tools/src/findDotnetTools.ts new file mode 100644 index 00000000000..d684656bee4 --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/src/findDotnetTools.ts @@ -0,0 +1,70 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * @format + */ + +import {execSync} from 'child_process'; +import fs from '@react-native-windows/fs'; +import os from 'os'; +import path from 'path'; + +/** + * Returns the path to the global NuGet packages folder, checking (in order): + * 1. The NUGET_PACKAGES environment variable + * 2. The `dotnet nuget locals` command output + * 3. The default ~/.nuget/packages location + */ +export function getNugetGlobalPackagesFolder(): string { + if (process.env.NUGET_PACKAGES) { + return process.env.NUGET_PACKAGES; + } + try { + const output = execSync('dotnet.exe nuget locals global-packages --list', { + encoding: 'utf8', + }).trim(); + const match = output.match(/global-packages:\s*(.+)/i); + if (match) { + return match[1].trim(); + } + } catch {} + return path.join(os.homedir(), '.nuget', 'packages'); +} + +/** + * Locates a PowerShell executable, checking (in order): + * 1. A NuGet-restored copy of pwsh (skipped in CI builds) + * 2. pwsh.exe on the system PATH + * + * Throws if no pwsh.exe can be located. + */ +export function findPowerShell(): string { + // Build agents already have PowerShell (pwsh) installed + if (!process.env.TF_BUILD) { + const nugetPackages = getNugetGlobalPackagesFolder(); + const nugetPwsh = path.join( + nugetPackages, + 'PowerShell', + '7.6.1', + 'tools', + 'net10.0', + 'any', + 'win', + 'pwsh.exe', + ); + if (fs.existsSync(nugetPwsh)) { + return nugetPwsh; + } + } + + try { + const found = execSync('where pwsh.exe', {encoding: 'utf8'}).trim(); + if (found) { + return found.split(/\r?\n/)[0]; + } + } catch {} + + throw new Error( + 'Unable to find pwsh.exe. It should have been made available by `yarn install`.', + ); +} diff --git a/packages/@react-native-windows/find-dotnet-tools/tsconfig.json b/packages/@react-native-windows/find-dotnet-tools/tsconfig.json new file mode 100644 index 00000000000..c62faa78baf --- /dev/null +++ b/packages/@react-native-windows/find-dotnet-tools/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@rnw-scripts/ts-config", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/@rnw-scripts/eslint-config/eslintrc.js b/packages/@rnw-scripts/eslint-config/eslintrc.js index bb32fcdd24e..a26b260fdaf 100644 --- a/packages/@rnw-scripts/eslint-config/eslintrc.js +++ b/packages/@rnw-scripts/eslint-config/eslintrc.js @@ -48,15 +48,6 @@ module.exports = { rules: { '@typescript-eslint/await-thenable': 'error', '@typescript-eslint/ban-tslint-comment': 'error', - '@typescript-eslint/ban-types': [ - 'error', { - 'extendDefaults': true, - 'types': { - // See https://github.com/typescript-eslint/typescript-eslint/issues/2063 - '{}': false - } - } - ], '@typescript-eslint/no-confusing-non-null-assertion': 'error', '@typescript-eslint/no-extra-non-null-assertion': 'error', '@typescript-eslint/no-floating-promises': [ diff --git a/packages/@rnw-scripts/just-task/nuget-restore-task.js b/packages/@rnw-scripts/just-task/nuget-restore-task.js index 0e2e66546cb..c5f1208347c 100644 --- a/packages/@rnw-scripts/just-task/nuget-restore-task.js +++ b/packages/@rnw-scripts/just-task/nuget-restore-task.js @@ -9,6 +9,7 @@ const fs = require('fs'); const path = require('path'); const {execSync, spawnSync} = require('child_process'); const {task} = require('just-scripts'); +const {findPowerShell} = require('@react-native-windows/find-dotnet-tools'); function registerNuGetRestoreTask(options) { const config = normalizeOptions(options); @@ -51,12 +52,14 @@ function executeNuGetRestore(config) { `Restoring NuGet packages (log: ${path.relative(process.cwd(), logPath)})`, ); + const powershell = findPowerShell(); + const scriptArgs = config.scriptArguments.length ? ` ${config.scriptArguments.join(' ')}` : ''; const restoreCommand = `call ${quote( vsDevCmd, - )} && powershell -NoProfile -ExecutionPolicy Bypass -File ${quote( + )} && "${powershell}" -NoProfile -ExecutionPolicy Bypass -File ${quote( config.scriptPath, )}${scriptArgs}`; const wrappedCommand = `${restoreCommand}`; @@ -111,7 +114,7 @@ function findVsDevCmd() { if (!fs.existsSync(vsWherePath)) { throw new Error( - 'vswhere.exe not found. Install Visual Studio 2022 (or Build Tools).', + 'vswhere.exe not found. Install Visual Studio 2026 (or Build Tools).', ); } diff --git a/packages/e2e-test-app-fabric/test/LegacySelectableTextTest.test.ts b/packages/e2e-test-app-fabric/test/LegacySelectableTextTest.test.ts index 7d9cc4fdb27..12beaa8ec91 100644 --- a/packages/e2e-test-app-fabric/test/LegacySelectableTextTest.test.ts +++ b/packages/e2e-test-app-fabric/test/LegacySelectableTextTest.test.ts @@ -53,12 +53,13 @@ describe('LegacySelectableTextTest', () => { const textExample = await app.findElementByTestID('text-example'); await textExample.doubleClick(); const dump = await dumpVisualTree('pressed-state'); - if (dump.Text === 'Pressed: 2 times.') { + const automationTree = dump['Automation Tree'] as Record; + if (automationTree['Name'] === 'Pressed: 1 times.') { // Due to the hardcoded speed between clicks in WinAppDriver, this test - // can be flaky on Windows Server 2022. Detect and warn here rather than - // disabling the entire test. - console.warn('DoubleClickWhenSelectable registered two clicks.'); - dump.Text = 'Pressed: 1 times.'; + // can be flaky. Detect and warn here rather than disabling the entire test. + console.warn('DoubleClickWhenSelectable registered only one click.'); + automationTree['Name'] = 'Pressed: 2 times.'; + automationTree['TextRangePattern.GetText'] = 'Pressed: 2 times.'; } expect(dump).toMatchSnapshot(); }); diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/TextComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/TextComponentTest.test.ts.snap index 9a870819a63..4dda45bf475 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/TextComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/TextComponentTest.test.ts.snap @@ -306,7 +306,7 @@ exports[`Text Tests Text can have a customized selection color 1`] = ` "Visual Tree": { "Comment": "text-selection-color", "Offset": "0, 0, 0", - "Size": "916, 20", + "Size": "916, 19", "Visual Type": "SpriteVisual", }, } @@ -675,7 +675,7 @@ exports[`Text Tests Text can have an outer color 1`] = ` "Visual Tree": { "Comment": "text-outer-color", "Offset": "0, 0, 0", - "Size": "916, 19", + "Size": "916, 20", "Visual Type": "SpriteVisual", }, } @@ -799,12 +799,12 @@ exports[`Text Tests Text can have borders 1`] = ` }, { "Offset": "100, 127, 0", - "Size": "716, 139", + "Size": "716, 138", "Visual Type": "SpriteVisual", "__Children": [ { "Offset": "0, 0, 0", - "Size": "716, 139", + "Size": "716, 138", "Visual Type": "SpriteVisual", "__Children": [ { @@ -853,12 +853,12 @@ exports[`Text Tests Text can have borders 1`] = ` }, { "Offset": "0, 365, 0", - "Size": "916, 19", + "Size": "916, 20", "Visual Type": "SpriteVisual", "__Children": [ { "Offset": "0, 0, 0", - "Size": "916, 19", + "Size": "916, 20", "Visual Type": "SpriteVisual", }, ], @@ -910,7 +910,7 @@ exports[`Text Tests Text can have decoration lines: Underline 1`] = ` "Visual Tree": { "Comment": "text-decoration-underline", "Offset": "0, 0, 0", - "Size": "916, 19", + "Size": "916, 20", "Visual Type": "SpriteVisual", }, } @@ -953,7 +953,7 @@ exports[`Text Tests Text can have inline views/images 1`] = ` "Visual Tree": { "Comment": "text-view", "Offset": "0, 0, 0", - "Size": "916, 26", + "Size": "916, 27", "Visual Type": "SpriteVisual", "__Children": [ { @@ -1230,7 +1230,7 @@ exports[`Text Tests Texts can clip inline View/Images 1`] = ` "Visual Tree": { "Comment": "text-view-images-clipped", "Offset": "0, 0, 0", - "Size": "916, 223", + "Size": "916, 222", "Visual Type": "SpriteVisual", "__Children": [ { diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap index 6b855e6a574..1d7849b4b33 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap @@ -1373,7 +1373,7 @@ exports[`TextInput Tests TextInputs can be editable 1`] = ` "Visual Tree": { "Comment": "textinput-editable", "Offset": "0, 0, 0", - "Size": "916, 29", + "Size": "916, 28", "Visual Type": "SpriteVisual", "__Children": [ { @@ -1986,7 +1986,7 @@ exports[`TextInput Tests TextInputs can clear on submit with custom submit key e "Visual Tree": { "Comment": "textinput-clear-on-submit-2", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { @@ -2601,7 +2601,7 @@ exports[`TextInput Tests TextInputs can have a font weight 1`] = ` "Visual Tree": { "Comment": "style-fontWeight", "Offset": "0, 0, 0", - "Size": "791, 29", + "Size": "791, 28", "Visual Type": "SpriteVisual", "__Children": [ { @@ -3381,7 +3381,7 @@ exports[`TextInput Tests TextInputs can have custom return key type, search 1`] "Visual Tree": { "Comment": "textinput-return-search", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { @@ -3459,7 +3459,7 @@ exports[`TextInput Tests TextInputs can have custom return key type, send 1`] = "Visual Tree": { "Comment": "textinput-return-send", "Offset": "0, 0, 0", - "Size": "916, 33", + "Size": "916, 32", "Visual Type": "SpriteVisual", "__Children": [ { @@ -3944,7 +3944,7 @@ exports[`TextInput Tests TextInputs can have customized letter spacing 1`] = ` "Visual Tree": { "Comment": "style-letterSpacing", "Offset": "0, 0, 0", - "Size": "791, 28", + "Size": "791, 29", "Visual Type": "SpriteVisual", "__Children": [ { @@ -4487,7 +4487,7 @@ exports[`TextInput Tests TextInputs can have text shadows 1`] = ` "Visual Tree": { "Comment": "style-textShadow", "Offset": "0, 0, 0", - "Size": "791, 29", + "Size": "791, 28", "Visual Type": "SpriteVisual", "__Children": [ { @@ -4945,7 +4945,7 @@ exports[`TextInput Tests TextInputs can select text on focus 1`] = ` "Visual Tree": { "Comment": "select-text-on-focus", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { @@ -5253,7 +5253,7 @@ exports[`TextInput Tests TextInputs have a custom background color 1`] = ` "Visual Tree": { "Comment": "textinput-custom-background-color", "Offset": "0, 0, 0", - "Size": "916, 33", + "Size": "916, 32", "Visual Type": "SpriteVisual", "__Children": [ { @@ -5330,7 +5330,7 @@ exports[`TextInput Tests TextInputs have a custom highlight color 1`] = ` "Visual Tree": { "Comment": "textinput-custom-highlight-color", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { @@ -5408,7 +5408,7 @@ exports[`TextInput Tests TextInputs have a custom placeholder text color 1`] = ` "Visual Tree": { "Comment": "textinput-custom-placeholder-color", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { @@ -5641,7 +5641,7 @@ exports[`TextInput Tests TextInputs have a default placeholder text color 1`] = "Visual Tree": { "Comment": "textinput-default-placeholder-color", "Offset": "0, 0, 0", - "Size": "916, 33", + "Size": "916, 32", "Visual Type": "SpriteVisual", "__Children": [ { @@ -5718,7 +5718,7 @@ exports[`TextInput Tests TextInputs have a default text color 1`] = ` "Visual Tree": { "Comment": "textinput-default-color", "Offset": "0, 0, 0", - "Size": "916, 32", + "Size": "916, 33", "Visual Type": "SpriteVisual", "__Children": [ { diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.Package/packages.lock.json b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.Package/packages.lock.json index ce59fc776ef..840cb1476b7 100644 --- a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.Package/packages.lock.json +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric.Package/packages.lock.json @@ -53,27 +53,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -95,34 +95,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -137,13 +137,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "automationchannel": { @@ -151,7 +151,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } }, @@ -178,7 +178,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -197,7 +197,7 @@ "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "SampleCustomComponent": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -207,7 +207,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } } @@ -225,11 +225,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -246,11 +246,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -267,11 +267,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -288,11 +288,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -309,11 +309,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -330,11 +330,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -351,11 +351,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.vcxproj b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.vcxproj index 25b92b0b1bd..91c87f118d6 100644 --- a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.vcxproj +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.vcxproj @@ -47,7 +47,7 @@ Application Unicode - v143 + v145 true diff --git a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/packages.lock.json b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/packages.lock.json index bab14e6eaad..8850f1e9d85 100644 --- a/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/packages.lock.json +++ b/packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/packages.lock.json @@ -28,19 +28,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -79,11 +79,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -105,34 +105,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -147,13 +147,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "automationchannel": { @@ -161,7 +161,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } }, @@ -188,7 +188,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -205,7 +205,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } } @@ -224,11 +224,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -246,11 +246,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -268,11 +268,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -290,11 +290,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/playground/windows/playground-composition.Package/packages.lock.json b/packages/playground/windows/playground-composition.Package/packages.lock.json index 25b34412846..9e4e215ef81 100644 --- a/packages/playground/windows/playground-composition.Package/packages.lock.json +++ b/packages/playground/windows/playground-composition.Package/packages.lock.json @@ -53,27 +53,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -95,34 +95,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -137,13 +137,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -169,7 +169,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -180,7 +180,7 @@ "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "SampleCustomComponent": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -197,7 +197,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } } @@ -215,11 +215,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -236,11 +236,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -257,11 +257,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -278,11 +278,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -299,11 +299,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -320,11 +320,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -341,11 +341,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/playground/windows/playground-composition/Playground-Composition.vcxproj b/packages/playground/windows/playground-composition/Playground-Composition.vcxproj index 0deea107e69..7e46605b50c 100644 --- a/packages/playground/windows/playground-composition/Playground-Composition.vcxproj +++ b/packages/playground/windows/playground-composition/Playground-Composition.vcxproj @@ -54,7 +54,7 @@ Application Unicode - v143 + v145 true diff --git a/packages/playground/windows/playground-composition/packages.lock.json b/packages/playground/windows/playground-composition/packages.lock.json index 0903a46e003..3c182a2879f 100644 --- a/packages/playground/windows/playground-composition/packages.lock.json +++ b/packages/playground/windows/playground-composition/packages.lock.json @@ -28,19 +28,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -79,11 +79,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -105,34 +105,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -147,13 +147,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -179,7 +179,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -196,7 +196,7 @@ "dependencies": { "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } } diff --git a/packages/sample-app-fabric/windows/SampleAppFabric.Package/packages.lock.json b/packages/sample-app-fabric/windows/SampleAppFabric.Package/packages.lock.json index e8a0d85df06..48d63ebb70b 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric.Package/packages.lock.json +++ b/packages/sample-app-fabric/windows/SampleAppFabric.Package/packages.lock.json @@ -53,27 +53,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -95,34 +95,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -137,13 +137,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -169,7 +169,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -187,7 +187,7 @@ "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.ReactNative": "[1.0.0, )", "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "boost": "[1.84.0, )" } } @@ -205,11 +205,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -226,11 +226,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -247,11 +247,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -268,11 +268,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -289,11 +289,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -310,11 +310,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -331,11 +331,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/sample-app-fabric/windows/SampleAppFabric/SampleAppFabric.vcxproj b/packages/sample-app-fabric/windows/SampleAppFabric/SampleAppFabric.vcxproj index c3b4020e7b0..ce85893aec2 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric/SampleAppFabric.vcxproj +++ b/packages/sample-app-fabric/windows/SampleAppFabric/SampleAppFabric.vcxproj @@ -48,7 +48,7 @@ Application Unicode - v143 + v145 true diff --git a/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json b/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json index 4e6fb50e067..4fbccb3b5ab 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json +++ b/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json @@ -28,19 +28,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -79,11 +79,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -105,34 +105,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -147,13 +147,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -179,7 +179,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -206,11 +206,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -228,11 +228,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -250,11 +250,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -272,11 +272,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/packages/sample-custom-component/windows/SampleCustomComponent/SampleCustomComponent.vcxproj b/packages/sample-custom-component/windows/SampleCustomComponent/SampleCustomComponent.vcxproj index bd3c90fdde2..6e466ef8759 100644 --- a/packages/sample-custom-component/windows/SampleCustomComponent/SampleCustomComponent.vcxproj +++ b/packages/sample-custom-component/windows/SampleCustomComponent/SampleCustomComponent.vcxproj @@ -48,7 +48,7 @@ DynamicLibrary Unicode - v143 + v145 false diff --git a/packages/sample-custom-component/windows/SampleCustomComponent/packages.lock.json b/packages/sample-custom-component/windows/SampleCustomComponent/packages.lock.json index 9f1b26b8946..530c02fb76c 100644 --- a/packages/sample-custom-component/windows/SampleCustomComponent/packages.lock.json +++ b/packages/sample-custom-component/windows/SampleCustomComponent/packages.lock.json @@ -22,19 +22,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -78,11 +78,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -104,34 +104,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -146,13 +146,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -178,7 +178,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } diff --git a/vnext/Desktop.ABITests/DynamicReaderWriterTests.cpp b/vnext/Desktop.ABITests/DynamicReaderWriterTests.cpp index 4f5b68e44f7..a228d77eb56 100644 --- a/vnext/Desktop.ABITests/DynamicReaderWriterTests.cpp +++ b/vnext/Desktop.ABITests/DynamicReaderWriterTests.cpp @@ -166,12 +166,8 @@ TEST_CLASS (DynamicReaderWriterTests) { } private: - template - void TestScalar( - void(IJSValueWriter::*writerMethod)(TWriterValue) const, - TReaderValue (IJSValueReader::*readerMethod)() const, - JSValueType runtimeType, - TWriterValue value) { + template + void TestScalar(WriterMethod writerMethod, ReaderMethod readerMethod, JSValueType runtimeType, TWriterValue value) { IJSValueWriter writer = Microsoft::Internal::TestController::CreateDynamicWriter(); (writer.*writerMethod)(value); diff --git a/vnext/Desktop.ABITests/packages.lock.json b/vnext/Desktop.ABITests/packages.lock.json index ab43a1e18e8..f889e350002 100644 --- a/vnext/Desktop.ABITests/packages.lock.json +++ b/vnext/Desktop.ABITests/packages.lock.json @@ -60,27 +60,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -102,34 +102,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -144,13 +144,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "ReactNative.V8Jsi.Windows": { @@ -188,7 +188,7 @@ "FollyWin32": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "ReactNative.V8Jsi.Windows": "[0.71.8, )", "boost": "[1.84.0, )" @@ -220,11 +220,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -236,11 +236,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -252,11 +252,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -268,11 +268,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/vnext/Desktop.DLL/packages.lock.json b/vnext/Desktop.DLL/packages.lock.json index 07a6d5fc008..b3ba7ff67af 100644 --- a/vnext/Desktop.DLL/packages.lock.json +++ b/vnext/Desktop.DLL/packages.lock.json @@ -57,27 +57,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -99,34 +99,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -141,13 +141,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -180,7 +180,7 @@ "FollyWin32": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "ReactNative.V8Jsi.Windows": "[0.71.8, )", "boost": "[1.84.0, )" diff --git a/vnext/Desktop.IntegrationTests/RNTesterHeadlessTests.cpp b/vnext/Desktop.IntegrationTests/RNTesterHeadlessTests.cpp index f25eb3cdd4d..c819059c280 100644 --- a/vnext/Desktop.IntegrationTests/RNTesterHeadlessTests.cpp +++ b/vnext/Desktop.IntegrationTests/RNTesterHeadlessTests.cpp @@ -8,6 +8,7 @@ #include #include +#include #include "Modules/TestModule.h" #include "TestReactNativeHostHolder.h" @@ -17,6 +18,35 @@ namespace msrn = winrt::Microsoft::ReactNative; namespace Microsoft::React::Test { +namespace { +void RunTest(std::wstring_view jsBundle) { + TestModule::Reset(); + + winrt::handle instanceLoadedEvent{CreateEvent(nullptr, TRUE, FALSE, nullptr)}; + bool instanceFailed{false}; + + auto holder = TestReactNativeHostHolder( + jsBundle, [&instanceLoadedEvent, &instanceFailed](msrn::ReactNativeHost const &host) noexcept { + host.InstanceSettings().InstanceLoaded( + [&instanceLoadedEvent, &instanceFailed](auto const &, msrn::InstanceLoadedEventArgs args) noexcept { + instanceFailed = args.Failed(); + SetEvent(instanceLoadedEvent.get()); + }); + }); + + // First, wait for instance to load + WaitForSingleObject(instanceLoadedEvent.get(), INFINITE); + if (instanceFailed) { + auto err = holder.GetLastError(); + auto msg = L"InstanceLoaded reported failure: " + (err.empty() ? L"(no error captured)" : err); + Assert::Fail(msg.c_str()); + } + + auto status = TestModule::AwaitCompletion(); + Assert::IsTrue(status == TestStatus::Passed, L"Test did not pass (JS did not call markTestPassed within timeout)"); +} +} // namespace + TEST_CLASS (RNTesterHeadlessTests) { TEST_CLASS_INITIALIZE(Initialize) { // https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/win32/mddbootstrap/nf-mddbootstrap-mddbootstrapinitialize2 @@ -37,31 +67,35 @@ TEST_CLASS (RNTesterHeadlessTests) { } TEST_METHOD(Dummy) { - TestModule::Reset(); - - winrt::handle instanceLoadedEvent{CreateEvent(nullptr, TRUE, FALSE, nullptr)}; - bool instanceFailed{false}; - - auto holder = TestReactNativeHostHolder( - L"IntegrationTests/DummyTest", - [&instanceLoadedEvent, &instanceFailed](msrn::ReactNativeHost const &host) noexcept { - host.InstanceSettings().InstanceLoaded( - [&instanceLoadedEvent, &instanceFailed](auto const &, msrn::InstanceLoadedEventArgs args) noexcept { - instanceFailed = args.Failed(); - SetEvent(instanceLoadedEvent.get()); - }); - }); - - // First, wait for instance to load - WaitForSingleObject(instanceLoadedEvent.get(), INFINITE); - if (instanceFailed) { - auto err = holder.GetLastError(); - auto msg = L"InstanceLoaded reported failure: " + (err.empty() ? L"(no error captured)" : err); - Assert::Fail(msg.c_str()); - } + RunTest(L"IntegrationTests/DummyTest"); + } + + TEST_METHOD(Fetch) { + RunTest(L"IntegrationTests/FetchTest"); + } + + TEST_METHOD(XHR) { + RunTest(L"IntegrationTests/XHRTest"); + } + + TEST_METHOD(WebSocket) { + RunTest(L"IntegrationTests/WebSocketTest"); + } + + TEST_METHOD(WebSocketBlob) { + RunTest(L"IntegrationTests/WebSocketBlobTest"); + } + + TEST_METHOD(WebSocketArrayBuffer) { + RunTest(L"IntegrationTests/WebSocketArrayBufferTest"); + } + + TEST_METHOD(WebSocketMultipleSend) { + RunTest(L"IntegrationTests/WebSocketMultipleSendTest"); + } - auto status = TestModule::AwaitCompletion(); - Assert::IsTrue(status == TestStatus::Passed, L"Test did not pass (JS did not call markTestPassed within timeout)"); + TEST_METHOD(Blob) { + RunTest(L"IntegrationTests/BlobTest"); } }; diff --git a/vnext/Desktop.IntegrationTests/packages.lock.json b/vnext/Desktop.IntegrationTests/packages.lock.json index 55284186367..dda7fd534fd 100644 --- a/vnext/Desktop.IntegrationTests/packages.lock.json +++ b/vnext/Desktop.IntegrationTests/packages.lock.json @@ -62,27 +62,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -104,34 +104,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -146,13 +146,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -185,7 +185,7 @@ "FollyWin32": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "ReactNative.V8Jsi.Windows": "[0.71.8, )", "boost": "[1.84.0, )" diff --git a/vnext/Desktop.UnitTests/React.Windows.Desktop.UnitTests.vcxproj b/vnext/Desktop.UnitTests/React.Windows.Desktop.UnitTests.vcxproj index 83eb2840d0a..2ac2d6d4c58 100644 --- a/vnext/Desktop.UnitTests/React.Windows.Desktop.UnitTests.vcxproj +++ b/vnext/Desktop.UnitTests/React.Windows.Desktop.UnitTests.vcxproj @@ -79,7 +79,7 @@ $(VCInstallDir)UnitTest\include; %(AdditionalIncludeDirectories) - %(AdditionalOptions) /await + %(AdditionalOptions) /await - /await %(AdditionalOptions) /bigobj /FS + %(AdditionalOptions) /bigobj /FS + %(AdditionalOptions) /await true Cdecl @@ -189,7 +190,7 @@ + Version="1.8.1.8" /> diff --git a/vnext/Microsoft.ReactNative.IntegrationTests/packages.experimentalwinui3.lock.json b/vnext/Microsoft.ReactNative.IntegrationTests/packages.experimentalwinui3.lock.json index f824566167f..29737786ece 100644 --- a/vnext/Microsoft.ReactNative.IntegrationTests/packages.experimentalwinui3.lock.json +++ b/vnext/Microsoft.ReactNative.IntegrationTests/packages.experimentalwinui3.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "Microsoft.VCRTForwarders.140": { "type": "Direct", diff --git a/vnext/Microsoft.ReactNative.IntegrationTests/packages.lock.json b/vnext/Microsoft.ReactNative.IntegrationTests/packages.lock.json index 655e5224376..c621b901588 100644 --- a/vnext/Microsoft.ReactNative.IntegrationTests/packages.lock.json +++ b/vnext/Microsoft.ReactNative.IntegrationTests/packages.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "Microsoft.VCRTForwarders.140": { "type": "Direct", @@ -28,19 +28,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -84,11 +84,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -110,34 +110,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -152,13 +152,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -184,7 +184,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "boost": "[1.84.0, )" } @@ -211,11 +211,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -233,11 +233,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -255,11 +255,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -277,11 +277,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/AnalysisTestBase.cs b/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/AnalysisTestBase.cs index d56ca634bb7..0b2bd56cf3e 100644 --- a/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/AnalysisTestBase.cs +++ b/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/AnalysisTestBase.cs @@ -71,7 +71,7 @@ public class TestClass var microsoftNetCoreUwpPkgFolder = Path.Combine(uwpPath, microsoftNetCoreUwpPkgVersion.ToString(), "ref", uapVersion); if (!Directory.Exists(microsoftNetCoreUwpPkgFolder)) { - Assert.Fail($"Could not find path {microsoftNetCoreUwpPkgFolder}. This should have been installed as part of the UWP workload for Microsoft Visual Studio 2022 version 17.0"); + Assert.Fail($"Could not find path {microsoftNetCoreUwpPkgFolder}. This should have been installed as part of the UWP workload for Microsoft Visual Studio 2026 version 18.0"); } references.AddRange(Directory.EnumerateFiles(microsoftNetCoreUwpPkgFolder, "*.dll")); diff --git a/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/Microsoft.ReactNative.Managed.CodeGen.UnitTests.csproj b/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/Microsoft.ReactNative.Managed.CodeGen.UnitTests.csproj index 8d5b5fa22a1..4e3c069ddf6 100644 --- a/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/Microsoft.ReactNative.Managed.CodeGen.UnitTests.csproj +++ b/vnext/Microsoft.ReactNative.Managed.CodeGen.UnitTests/Microsoft.ReactNative.Managed.CodeGen.UnitTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 x64 win-x64 false diff --git a/vnext/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj b/vnext/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj index 6b18c3aeecb..bccc8d80bdf 100644 --- a/vnext/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +++ b/vnext/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj @@ -3,7 +3,7 @@ Exe - net8.0 + net10.0 x64;x86;ARM64 win-x86;win-x64 @@ -31,8 +31,8 @@ - @@ -53,7 +53,7 @@ - @@ -62,13 +62,13 @@ - - diff --git a/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml b/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml index c6c28996632..910d6f9f7d6 100644 --- a/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +++ b/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml @@ -6,7 +6,7 @@ FileSystem Debug x64 - net8.0 + net10.0 $(OutDir)publish win-x64 true diff --git a/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml b/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml index 373853ddc0e..9973e782006 100644 --- a/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +++ b/vnext/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml @@ -6,7 +6,7 @@ FileSystem Release x64 - net8.0 + net10.0 $(OutDir)publish win-x64 true diff --git a/vnext/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj b/vnext/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj index 2219b23fddf..6f86d621885 100644 --- a/vnext/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +++ b/vnext/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj @@ -15,7 +15,7 @@ UAP 10.0.22621.0 10.0.17763.0 - 17.0 + 18.0 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} bin\$(Platform)\$(Configuration)\Microsoft.ReactNative.Managed.XML @@ -150,8 +150,8 @@ - - 17.0 + + 18.0 diff --git a/vnext/Microsoft.ReactNative.NewArch.sln b/vnext/Microsoft.ReactNative.NewArch.sln index 46c8480284b..70f9c21dddb 100644 --- a/vnext/Microsoft.ReactNative.NewArch.sln +++ b/vnext/Microsoft.ReactNative.NewArch.sln @@ -1,12 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32929.385 +# Visual Studio Version 18 +VisualStudioVersion = 18.6.11819.183 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}" - ProjectSection(ProjectDependencies) = postProject - {14B93DC8-FD93-4A6D-81CB-8BC96644501C} = {14B93DC8-FD93-4A6D-81CB-8BC96644501C} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}" EndProject @@ -111,11 +108,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ReactNative.CsWin EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 + Debug|ARM64 = Debug|ARM64 Debug|x86 = Debug|x86 - Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 + Release|ARM64 = Release|ARM64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution diff --git a/vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj b/vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj index c44789aaba5..65e4a5f6ef4 100644 --- a/vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +++ b/vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj @@ -10,7 +10,7 @@ Microsoft.ReactNative Microsoft.ReactNative en-US - 17.0 + 18.0 true Windows Store 10.0 @@ -96,7 +96,8 @@ $(IntDir)pch.pch pch.h Level4 - /await %(AdditionalOptions) /bigobj /ZH:SHA_256 + %(AdditionalOptions) /bigobj /ZH:SHA_256 + %(AdditionalOptions) /await $(FmtDir)\include; $(ReactNativeWindowsDir)Microsoft.ReactNative; diff --git a/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.cpp b/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.cpp index 5194f68f6de..f203757a28e 100644 --- a/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +++ b/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.cpp @@ -54,7 +54,29 @@ std::string GetBundleFromEmbeddedResource(const winrt::Windows::Foundation::Uri return std::string(start, start + size); } -std::future LocalBundleReader::LoadBundleAsync(const std::wstring bundleUri) { +namespace { + +std::string BufferToString(const winrt::Windows::Storage::Streams::IBuffer &buffer) { + std::string result(buffer.Length(), '\0'); + if (!result.empty()) { + auto reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(buffer); + reader.ReadBytes(winrt::array_view{ + reinterpret_cast(&result[0]), reinterpret_cast(&result[result.length()])}); + } + return result; +} + +winrt::Windows::Storage::Streams::IBuffer BytesToBuffer(const void *data, uint32_t size) { + winrt::Windows::Storage::Streams::DataWriter writer; + auto bytes = static_cast(data); + writer.WriteBytes(winrt::array_view(bytes, bytes + size)); + return writer.DetachBuffer(); +} + +} // namespace + +winrt::Windows::Foundation::IAsyncOperation +LocalBundleReader::LoadBundleAsync(const std::wstring bundleUri) { try { co_await winrt::resume_background(); @@ -66,41 +88,26 @@ std::future LocalBundleReader::LoadBundleAsync(const std::wstring b file = co_await winrt::Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(uri); } else if (bundleUri.starts_with(L"resource://")) { winrt::Windows::Foundation::Uri uri(bundleUri); - co_return GetBundleFromEmbeddedResource(uri); + auto bytes = GetBundleFromEmbeddedResource(uri); + co_return BytesToBuffer(bytes.data(), static_cast(bytes.size())); } else { file = co_await winrt::Windows::Storage::StorageFile::GetFileFromPathAsync(bundleUri); } - // Read the buffer manually to avoid a Utf8 -> Utf16 -> Utf8 encoding - // roundtrip. - auto fileBuffer{co_await winrt::Windows::Storage::FileIO::ReadBufferAsync(file)}; - auto dataReader{winrt::Windows::Storage::Streams::DataReader::FromBuffer(fileBuffer)}; - - // No need to use length + 1, STL guarantees that string storage is null-terminated. - std::string script(fileBuffer.Length(), '\0'); - - // Construct the array_view to slice into the first fileBuffer.Length bytes. - // DataReader.ReadBytes will read as many bytes as are present in the - // array_view. The backing string has fileBuffer.Length() + 1 bytes, without - // an explicit end it will read 1 byte to many and throw. - dataReader.ReadBytes(winrt::array_view{ - reinterpret_cast(&script[0]), reinterpret_cast(&script[script.length()])}); - dataReader.Close(); - - co_return script; + co_return co_await winrt::Windows::Storage::FileIO::ReadBufferAsync(file); } // RuntimeScheduler only handles std::exception or jsi::JSError - catch (winrt::hresult_error const &e) { - throw std::exception(winrt::to_string(e.message()).c_str()); + catch (winrt::hresult_error const &) { + throw; } } std::string LocalBundleReader::LoadBundle(const std::wstring &bundlePath) { - return LoadBundleAsync(bundlePath).get(); + return BufferToString(LoadBundleAsync(bundlePath).get()); } StorageFileBigString::StorageFileBigString(const std::wstring &path) { - m_futureBuffer = LocalBundleReader::LoadBundleAsync(path); + m_pendingLoad = LocalBundleReader::LoadBundleAsync(path); } bool StorageFileBigString::isAscii() const { @@ -118,8 +125,9 @@ size_t StorageFileBigString::size() const { } void StorageFileBigString::ensure() const { - if (m_string.empty()) { - m_string = m_futureBuffer.get(); + if (m_pendingLoad) { + m_string = BufferToString(m_pendingLoad.get()); + m_pendingLoad = nullptr; } } diff --git a/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.h b/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.h index 8671ebf59ee..4286189b94d 100644 --- a/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.h +++ b/vnext/Microsoft.ReactNative/Utils/LocalBundleReader.h @@ -3,14 +3,16 @@ #pragma once #include -#include +#include +#include #include namespace Microsoft::ReactNative { class LocalBundleReader { public: - static std::future LoadBundleAsync(const std::wstring bundlePath); + static winrt::Windows::Foundation::IAsyncOperation LoadBundleAsync( + const std::wstring bundlePath); static std::string LoadBundle(const std::wstring &bundlePath); }; @@ -24,7 +26,7 @@ class StorageFileBigString : public facebook::react::JSBigString { void ensure() const; private: - mutable std::future m_futureBuffer; + mutable winrt::Windows::Foundation::IAsyncOperation m_pendingLoad; mutable std::string m_string; }; diff --git a/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.cpp b/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.cpp index 59bb0c805db..87e21081a06 100644 --- a/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +++ b/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include "Unicode.h" namespace winrt { @@ -43,7 +42,8 @@ facebook::jsi::ScriptVersion_t UwpScriptStore::getScriptVersion(const std::strin return version; } -std::future UwpScriptStore::getScriptVersionAsync(const std::string &bundleUri) { +winrt::Windows::Foundation::IAsyncOperation UwpScriptStore::getScriptVersionAsync( + const std::string &bundleUri) { co_await winrt::resume_background(); const winrt::hstring fileUrl(Microsoft::Common::Unicode::Utf8ToUtf16("ms-appx:///Bundle/" + bundleUri + ".bundle")); diff --git a/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.h b/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.h index 6b77db3f9e7..78b1ff112ae 100644 --- a/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.h +++ b/vnext/Microsoft.ReactNative/Utils/UwpScriptStore.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include namespace Microsoft::ReactNative { @@ -16,7 +16,8 @@ class UwpScriptStore : public facebook::jsi::ScriptStore { static facebook::jsi::ScriptVersion_t GetFileVersion(const std::wstring &filePath); private: - std::future getScriptVersionAsync(const std::string &bundleUri); + winrt::Windows::Foundation::IAsyncOperation getScriptVersionAsync( + const std::string &bundleUri); }; } // namespace Microsoft::ReactNative diff --git a/vnext/Microsoft.ReactNative/packages.lock.json b/vnext/Microsoft.ReactNative/packages.lock.json index bd16de7cda1..b0e3e5c9f2c 100644 --- a/vnext/Microsoft.ReactNative/packages.lock.json +++ b/vnext/Microsoft.ReactNative/packages.lock.json @@ -32,19 +32,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Build.Tasks.Git": { @@ -74,11 +74,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -100,34 +100,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -142,13 +142,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -183,11 +183,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -199,11 +199,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -215,11 +215,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -231,11 +231,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -247,11 +247,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -263,11 +263,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -279,11 +279,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/vnext/Mso.UnitTests/Mso.UnitTests.vcxproj b/vnext/Mso.UnitTests/Mso.UnitTests.vcxproj index 74fb6cc93fa..6d90cf64452 100644 --- a/vnext/Mso.UnitTests/Mso.UnitTests.vcxproj +++ b/vnext/Mso.UnitTests/Mso.UnitTests.vcxproj @@ -94,7 +94,8 @@ /bigobj - /FS - Force Synchronous PDB writes. Useful when setting MultiProcCL. --> - /await %(AdditionalOptions) /bigobj /FS + %(AdditionalOptions) /bigobj /FS + %(AdditionalOptions) /await true Cdecl @@ -182,7 +183,7 @@ + Version="1.8.1.8" /> diff --git a/vnext/Mso.UnitTests/packages.experimentalwinui3.lock.json b/vnext/Mso.UnitTests/packages.experimentalwinui3.lock.json index 37e573dcf94..abb0152cdb0 100644 --- a/vnext/Mso.UnitTests/packages.experimentalwinui3.lock.json +++ b/vnext/Mso.UnitTests/packages.experimentalwinui3.lock.json @@ -4,9 +4,9 @@ "native,Version=v0.0": { "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "Microsoft.Windows.CppWinRT": { "type": "Direct", diff --git a/vnext/Mso.UnitTests/packages.lock.json b/vnext/Mso.UnitTests/packages.lock.json index 3077a54470f..15daeef8049 100644 --- a/vnext/Mso.UnitTests/packages.lock.json +++ b/vnext/Mso.UnitTests/packages.lock.json @@ -4,9 +4,9 @@ "native,Version=v0.0": { "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "Microsoft.Windows.CppWinRT": { "type": "Direct", @@ -16,19 +16,19 @@ }, "Microsoft.WindowsAppSDK": { "type": "Direct", - "requested": "[1.8.260209005, )", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "requested": "[1.8.260508005, )", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.Web.WebView2": { @@ -48,11 +48,11 @@ }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -74,34 +74,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -116,13 +116,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -134,11 +134,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -150,11 +150,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -166,11 +166,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -182,11 +182,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/vnext/PropertySheets/React.Cpp.props b/vnext/PropertySheets/React.Cpp.props index 0c757c4b5a2..cbddacfb5f0 100644 --- a/vnext/PropertySheets/React.Cpp.props +++ b/vnext/PropertySheets/React.Cpp.props @@ -43,8 +43,8 @@ - - false + + true $(WinUI3ExperimentalVersion) - 1.8.260209005 + 1.8.260508005 false diff --git a/vnext/ReactCommon.UnitTests/ReactCommon.UnitTests.vcxproj b/vnext/ReactCommon.UnitTests/ReactCommon.UnitTests.vcxproj index 353a7e1bc20..34e077a5675 100644 --- a/vnext/ReactCommon.UnitTests/ReactCommon.UnitTests.vcxproj +++ b/vnext/ReactCommon.UnitTests/ReactCommon.UnitTests.vcxproj @@ -181,7 +181,7 @@ - + \ No newline at end of file diff --git a/vnext/ReactCommon.UnitTests/packages.experimentalwinui3.lock.json b/vnext/ReactCommon.UnitTests/packages.experimentalwinui3.lock.json index 2ec043e5758..3997eb58712 100644 --- a/vnext/ReactCommon.UnitTests/packages.experimentalwinui3.lock.json +++ b/vnext/ReactCommon.UnitTests/packages.experimentalwinui3.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "ReactNative.V8Jsi.Windows": { "type": "Direct", diff --git a/vnext/ReactCommon.UnitTests/packages.lock.json b/vnext/ReactCommon.UnitTests/packages.lock.json index 423d8b7d707..4d4d60c6f61 100644 --- a/vnext/ReactCommon.UnitTests/packages.lock.json +++ b/vnext/ReactCommon.UnitTests/packages.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn": { "type": "Direct", - "requested": "[1.8.1.7, )", - "resolved": "1.8.1.7", - "contentHash": "FxNwT4YpsGdqforqFSTGc5f/e+qfRJ+1wf5G1w0nEEkT5pr5M95E5+fOuswpPUGXPZIXM+M7BSVGnCRcQZjomA==" + "requested": "[1.8.1.8, )", + "resolved": "1.8.1.8", + "contentHash": "RHZUuFTnYzkHPRM5muZfw4SRL/EIHFz7nIkKl1mJKPISvzi1wWtK7k/oJIpw3pWVkdFyEfnBQP8vX1fFpe7Mpw==" }, "ReactNative.V8Jsi.Windows": { "type": "Direct", @@ -61,27 +61,27 @@ }, "Microsoft.WindowsAppSDK": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "AGHOiZcrDrpaxpHfEFKlI8MVnibfbSixI5DlbU6ozP/9dyWN5FkTFowg+dEOnaFRCnOzTSAjBQ1HuS4lAO+aMQ==", + "resolved": "1.8.260508005", + "contentHash": "+aA+zrvqJKgsn/1TPOSR0Uy7dkMO5jI/+cDWPu2pWmXe4KQxYkR8gQFY9IrfbgCxxSd/yl1zMcAKD/4HBbNqaw==", "dependencies": { - "Microsoft.WindowsAppSDK.AI": "[1.8.47]", + "Microsoft.WindowsAppSDK.AI": "[1.8.76]", "Microsoft.WindowsAppSDK.Base": "[1.8.251216001]", "Microsoft.WindowsAppSDK.DWrite": "[1.8.25122902]", - "Microsoft.WindowsAppSDK.Foundation": "[1.8.260203002]", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260125001]", - "Microsoft.WindowsAppSDK.ML": "[1.8.2124]", - "Microsoft.WindowsAppSDK.Runtime": "[1.8.260209005]", + "Microsoft.WindowsAppSDK.Foundation": "[1.8.260505001]", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "[1.8.260430001]", + "Microsoft.WindowsAppSDK.ML": "[1.8.2197]", + "Microsoft.WindowsAppSDK.Runtime": "[1.8.260508005]", "Microsoft.WindowsAppSDK.Widgets": "[1.8.251231004]", - "Microsoft.WindowsAppSDK.WinUI": "[1.8.260204000]" + "Microsoft.WindowsAppSDK.WinUI": "[1.8.260505002]" } }, "Microsoft.WindowsAppSDK.AI": { "type": "Transitive", - "resolved": "1.8.47", - "contentHash": "9il8KT8WR4T826hnm3M/USZTkPtVXFGE0IztmE1l7H9DPYsa3QHEUgGHFHQg88fsMjdr3vhyMvs23AB+1IYF1w==", + "resolved": "1.8.76", + "contentHash": "Ayn9QybcwzH+c8eQlE7dm2oO3Jrcn2uohLcsHJpCbLOAfcisjzwtSBe0oyulbaJ86R4eDSX3RDS25tsjGpIqyQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260501000" } }, "Microsoft.WindowsAppSDK.Base": { @@ -103,34 +103,34 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "Microsoft.WindowsAppSDK.InteractiveExperiences": { "type": "Transitive", - "resolved": "1.8.260125001", - "contentHash": "CTGFd1zhIDbnOltZ6piPvpNXFR1OaNyW3vHvhaILzpGziAgj5DPuVnU3PUp1p5iOBd382FLCBVM6nEPyu/LCOA==", + "resolved": "1.8.260430001", + "contentHash": "fTPCnQb3ZarMh9khlEfbLDllcZzK0tSP+2S6W/T4cPyLLSAmARm8Gd3AC5kqubnDjzTvG+1lNZ1bZGFsIHplJQ==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } }, "Microsoft.WindowsAppSDK.ML": { "type": "Transitive", - "resolved": "1.8.2124", - "contentHash": "l7ZptLbvOWHEJgxZtCQhUzDNCakNcqSJyAa7DNXBLKxGIUMDqq9LnWyYRZZFNQwN7hRfDAR8fEAblP1UHYHGgw==", + "resolved": "1.8.2197", + "contentHash": "6Bc1SOLd5HicY3GbF+zr76YBfH4iZOKeEGxTK/lHKAK2ExZTWavOADxB2CKSi/irF4dWSngUdRFopWPmckJ6fA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260126001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001" } }, "Microsoft.WindowsAppSDK.Runtime": { "type": "Transitive", - "resolved": "1.8.260209005", - "contentHash": "aZjMu/glUGjzACowzzhj9drn/Ddfp1yA+f7CFXpkiSk6iZ2x32vhKfcqT64RpJ6R+Dj1hl9/79aXFhIavYNj9g==", + "resolved": "1.8.260508005", + "contentHash": "2JqXzA4heHSkkaXJNyEvYtpv2wsEUMhwQzgXmZsFmYSkUXSdeVc6hdHcWoBK1SY9l1Sjd1brLt7h16kIpgh2kA==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001" } @@ -145,13 +145,13 @@ }, "Microsoft.WindowsAppSDK.WinUI": { "type": "Transitive", - "resolved": "1.8.260204000", - "contentHash": "DSpA01+iPXwky4O1uZCrdClSi2aRIYTIhmsTeC1EsJmWBFpSirwNAg4EGHejijV6u4ZVkTdyv3px0Y2P3fp72Q==", + "resolved": "1.8.260505002", + "contentHash": "/hGl6EOmo8aeJR2bYbOmGhOicnJK4EY+u+cQI+jm8H1uXThfMX32DsfKOt9LkOcu8AKX3j5FpiBay8ObUSytIw==", "dependencies": { "Microsoft.Web.WebView2": "1.0.3179.45", "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.Foundation": "1.8.260203002", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.Foundation": "1.8.260505001", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } }, "common": { @@ -184,7 +184,7 @@ "FollyWin32": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.0.0-2605.6002-2279da22, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.WindowsAppSDK": "[1.8.260209005, )", + "Microsoft.WindowsAppSDK": "[1.8.260508005, )", "ReactCommon": "[1.0.0, )", "ReactNative.V8Jsi.Windows": "[0.71.8, )", "boost": "[1.84.0, )" @@ -206,11 +206,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -222,11 +222,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -238,11 +238,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } }, @@ -254,11 +254,11 @@ }, "Microsoft.WindowsAppSDK.Foundation": { "type": "Transitive", - "resolved": "1.8.260203002", - "contentHash": "eKQ/prWq98mW7+E+ffot47iZNbDnq/NVN9R9Gi8vmoU/3Ka6zNNivxdICXh6j7g6REFPCV9530/nQYQC0L3fwg==", + "resolved": "1.8.260505001", + "contentHash": "41SSoEn3sKKCAVPA/w18zVJwV1C7aDEkPS2f6Zyp19m27tDEmteEp0XS3Ln3b0ElYR4FfPEPvIDbJPSA9vePGw==", "dependencies": { "Microsoft.WindowsAppSDK.Base": "1.8.251216001", - "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260125001" + "Microsoft.WindowsAppSDK.InteractiveExperiences": "1.8.260430001" } } } diff --git a/vnext/Scripts/JustMyXaml.ps1 b/vnext/Scripts/JustMyXaml.ps1 index 1e0e475b488..048fcb14ef0 100644 --- a/vnext/Scripts/JustMyXaml.ps1 +++ b/vnext/Scripts/JustMyXaml.ps1 @@ -1,4 +1,4 @@ -# This script enables or disables VS 2022's JustMyXaml feature +# This script enables or disables VS 2026's JustMyXaml feature [CmdletBinding()] param([bool]$Enable) @@ -7,14 +7,14 @@ if (!([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups } $instanceId = & "$(${env:ProgramFiles(x86)})\Microsoft Visual Studio\Installer\vswhere.exe" -property instanceId -$hiveFile = "$($env:LocalAppData)\Microsoft\VisualStudio\17.0_$instanceId\privateregistry.bin" -& reg.exe load HKLM\VS2022_HIVE $hiveFile | Out-Null -New-PSDrive -Name VS2022 -PSProvider Registry -Root HKLM\VS2022_HIVE -ErrorAction Stop | Out-Null -$currentValue = (Get-ItemProperty VS2022:\Software\Microsoft\VisualStudio\17.0_$instanceId\Debugger -Name EnableXamlVisualDiagnosticsJustMyXaml).EnableXamlVisualDiagnosticsJustMyXaml +$hiveFile = "$($env:LocalAppData)\Microsoft\VisualStudio\18.0_$instanceId\privateregistry.bin" +& reg.exe load HKLM\VS2026_HIVE $hiveFile | Out-Null +New-PSDrive -Name VS2026 -PSProvider Registry -Root HKLM\VS2026_HIVE -ErrorAction Stop | Out-Null +$currentValue = (Get-ItemProperty VS2026:\Software\Microsoft\VisualStudio\18.0_$instanceId\Debugger -Name EnableXamlVisualDiagnosticsJustMyXaml).EnableXamlVisualDiagnosticsJustMyXaml if ($currentValue -eq 0) { $currentValue = $false; } else { $currentValue = $true; } Write-Host "Current value: $currentValue" if ($Enable) { $newValue = 1; } else { $newValue = 0; } -Set-ItemProperty VS2022:\Software\Microsoft\VisualStudio\17.0_$instanceId\Debugger -Name EnableXamlVisualDiagnosticsJustMyXaml -Value $newValue -Type DWord +Set-ItemProperty VS2026:\Software\Microsoft\VisualStudio\18.0_$instanceId\Debugger -Name EnableXamlVisualDiagnosticsJustMyXaml -Value $newValue -Type DWord Write-Host "New value: $Enable" -Remove-PSDrive -Name VS2022 -& reg.exe unload HKLM\VS2022_HIVE | Out-Null +Remove-PSDrive -Name VS2026 +& reg.exe unload HKLM\VS2026_HIVE | Out-Null diff --git a/vnext/Scripts/UnitTest.ps1 b/vnext/Scripts/UnitTest.ps1 index 010e114948c..643658f685b 100644 --- a/vnext/Scripts/UnitTest.ps1 +++ b/vnext/Scripts/UnitTest.ps1 @@ -23,7 +23,9 @@ param ( "ReactCommon.UnitTests\ReactCommon.UnitTests.exe") ), - [System.IO.FileInfo] $VsTest = "${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" + [System.IO.FileInfo] $VsTest = + "$(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath)\" + + "Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" ) if ($Include.Count) { diff --git a/vnext/Scripts/rnw-dependencies.ps1 b/vnext/Scripts/rnw-dependencies.ps1 index a57d7809f5c..6ec18cf8140 100644 --- a/vnext/Scripts/rnw-dependencies.ps1 +++ b/vnext/Scripts/rnw-dependencies.ps1 @@ -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 ) @@ -94,7 +94,6 @@ $vsComponents = @('Microsoft.Component.MSBuild', $vcToolsComponent, 'Microsoft.VisualStudio.ComponentGroup.UWP.Support', 'Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core', - 'Microsoft.VisualStudio.Component.Windows10SDK.19041', 'Microsoft.VisualStudio.Component.Windows11SDK.22621'); # UWP.VC is not needed to build the projects with msbuild, but the VS IDE requires it. @@ -113,12 +112,12 @@ $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.6.1"; # The exact .NET SDK version to check for -$dotnetver = "8.0"; +$dotnetver = "10.0"; # Version name of the winget package -$wingetDotNetVer = "8"; +$wingetDotNetVer = "10"; $v = [System.Environment]::OSVersion.Version; if ($env:Agent_BuildDirectory) { @@ -242,9 +241,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.Enterprise } else { - WinGetInstall Microsoft.VisualStudio.2022.Community + WinGetInstall Microsoft.VisualStudio.Community } $vsWhere = Get-VSWhere; @@ -458,8 +457,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; @@ -491,7 +490,7 @@ $requirements = @( $downloadPath = "$env:TEMP\WindowsApplicationDriver.msi" Write-Verbose "Downloading WinAppDriver from $url"; Invoke-WebRequest -UseBasicParsing $url -OutFile $downloadPath - + # SDL Compliance: Verify signature (Work Item 58386093) $signature = Get-AuthenticodeSignature $downloadPath if ($signature.Status -ne "Valid") { @@ -499,10 +498,10 @@ $requirements = @( throw "WinAppDriver signature verification failed" } if ($signature.SignerCertificate.Subject -notlike "*Microsoft*") { - Remove-Item $downloadPath -ErrorAction SilentlyContinue + Remove-Item $downloadPath -ErrorAction SilentlyContinue throw "WinAppDriver not signed by Microsoft" } - + & $downloadPath /q Remove-Item $downloadPath -ErrorAction SilentlyContinue }; @@ -600,7 +599,7 @@ function WinGetInstall { Write-Verbose "Executing `winget install `"$wingetPackage`""; & winget install "$wingetPackage" --accept-source-agreements --accept-package-agreements } - + # Refresh PATH environment variable to pick up newly installed tools $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") } @@ -693,12 +692,12 @@ foreach ($req in $filteredRequirements) try { $validAfterInstall = Invoke-Command $req.Valid; } catch { } - + if ($validAfterInstall) { $Installed++; continue; # go to the next item } - + if ($LASTEXITCODE -ne 0) { throw "Last exit code was non-zero: $LASTEXITCODE - $outputFromInstall"; } @@ -737,4 +736,4 @@ if ($NeedsRerun -ne 0) { $Tags | Out-File $MarkerFile; if (!$ShellInvocation) { Read-Host 'Press Enter to exit' } exit 0; -} \ No newline at end of file +} diff --git a/vnext/Shared/DevSupportManager.cpp b/vnext/Shared/DevSupportManager.cpp index b485fc1b304..b964abcdce2 100644 --- a/vnext/Shared/DevSupportManager.cpp +++ b/vnext/Shared/DevSupportManager.cpp @@ -33,7 +33,6 @@ #include #pragma warning(pop) -#include #include #include @@ -47,61 +46,59 @@ using namespace facebook::react; namespace Microsoft::ReactNative { -std::future> GetJavaScriptFromServerAsync(const std::string &url) { - winrt::Windows::Web::Http::Filters::HttpBaseProtocolFilter filter; - filter.CacheControl().ReadBehavior(winrt::Windows::Web::Http::Filters::HttpCacheReadBehavior::NoCache); - winrt::Windows::Web::Http::HttpClient httpClient(filter); - winrt::Windows::Foundation::Uri uri(Microsoft::Common::Unicode::Utf8ToUtf16(url)); +winrt::Windows::Foundation::IAsyncOperation GetJavaScriptFromServerAsync( + const std::string &url) { + try { + winrt::Windows::Web::Http::Filters::HttpBaseProtocolFilter filter; + filter.CacheControl().ReadBehavior(winrt::Windows::Web::Http::Filters::HttpCacheReadBehavior::NoCache); + winrt::Windows::Web::Http::HttpClient httpClient(filter); + winrt::Windows::Foundation::Uri uri(Microsoft::Common::Unicode::Utf8ToUtf16(url)); - co_await winrt::resume_background(); + co_await winrt::resume_background(); - winrt::Windows::Web::Http::HttpRequestMessage request(winrt::Windows::Web::Http::HttpMethod::Get(), uri); - auto asyncRequest = httpClient.SendRequestAsync(request); + winrt::Windows::Web::Http::HttpRequestMessage request(winrt::Windows::Web::Http::HttpMethod::Get(), uri); + auto asyncRequest = httpClient.SendRequestAsync(request); #ifdef DEFAULT_CPPWINRT_EXCEPTIONS - try { winrt::Windows::Web::Http::HttpResponseMessage response = co_await asyncRequest; - } catch (winrt::hresult_error const &e) { - co_return std::make_pair( - Microsoft::Common::Unicode::Utf16ToUtf8(e.message().c_str(), e.message().size()).c_str(), false); - } #else - co_await lessthrow_await_adapter>{asyncRequest}; - - HRESULT hr = asyncRequest.ErrorCode(); - if (FAILED(hr)) { - std::string error; - if (hr == WININET_E_CANNOT_CONNECT) { - error = fmt::format("A connection with the server {} could not be established.\n\nIs the packager running?", url); - } else { - error = fmt::format("Error 0x{:x} downloading {}.", static_cast(asyncRequest.ErrorCode()), url); + co_await lessthrow_await_adapter>{asyncRequest}; + + HRESULT hr = asyncRequest.ErrorCode(); + if (FAILED(hr)) { + std::string error; + if (hr == WININET_E_CANNOT_CONNECT) { + error = + fmt::format("A connection with the server {} could not be established.\n\nIs the packager running?", url); + } else { + error = fmt::format("Error 0x{:x} downloading {}.", static_cast(asyncRequest.ErrorCode()), url); + } + throw winrt::hresult_error(E_FAIL, winrt::to_hstring(error)); } - co_return std::make_pair(error, false); - } - winrt::Windows::Web::Http::HttpResponseMessage response = asyncRequest.GetResults(); + winrt::Windows::Web::Http::HttpResponseMessage response = asyncRequest.GetResults(); #endif - winrt::Windows::Storage::Streams::IBuffer buffer = co_await response.Content().ReadAsBufferAsync(); - auto reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(buffer); - - reader.UnicodeEncoding(winrt::Windows::Storage::Streams::UnicodeEncoding::Utf8); - uint32_t len = reader.UnconsumedBufferLength(); - std::string result; - if (len > 0 || response.IsSuccessStatusCode()) { - std::string data; - data.resize(len); - auto buf = reinterpret_cast(data.data()); - static_assert( - sizeof(buf[0]) == sizeof(data[0]), "perf optimization relies on uint8_t and char being the same size"); - reader.ReadBytes(winrt::array_view(buf, buf + len)); - result = std::move(data); - } else { - result = fmt::format("HTTP Error {} downloading {}.", static_cast(response.StatusCode()), url); - } + winrt::Windows::Storage::Streams::IBuffer buffer = co_await response.Content().ReadAsBufferAsync(); + + if (!response.IsSuccessStatusCode()) { + std::string error; + if (buffer.Length() > 0) { + auto reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(buffer); + error.resize(buffer.Length()); + auto buf = reinterpret_cast(error.data()); + reader.ReadBytes(winrt::array_view(buf, buf + buffer.Length())); + } else { + error = fmt::format("HTTP Error {} downloading {}.", static_cast(response.StatusCode()), url); + } + throw winrt::hresult_error(E_FAIL, winrt::to_hstring(error)); + } - co_return std::make_pair(std::move(result), response.IsSuccessStatusCode()); + co_return buffer; + } catch (winrt::hresult_error const &) { + throw; + } } void LaunchDevTools(const facebook::react::DevSettings &settings) { @@ -185,7 +182,8 @@ std::string GetPackageName(const std::string &bundleAppId) { return packageName; } -std::future PollForLiveReload(const std::string &url) { +winrt::Windows::Foundation::IAsyncOperation PollForLiveReload( + const std::string &url) { winrt::Windows::Web::Http::HttpClient httpClient; winrt::Windows::Foundation::Uri uri(Microsoft::Common::Unicode::Utf8ToUtf16(url)); httpClient.DefaultRequestHeaders().Connection().TryParseAdd(L"keep-alive"); @@ -299,7 +297,16 @@ std::pair GetJavaScriptFromServer( inlineSourceMap, hermesBytecodeVersion); try { - return GetJavaScriptFromServerAsync(bundleUrl).get(); + auto buffer = GetJavaScriptFromServerAsync(bundleUrl).get(); + std::string result(buffer.Length(), '\0'); + if (!result.empty()) { + auto reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(buffer); + reader.ReadBytes(winrt::array_view{ + reinterpret_cast(&result[0]), reinterpret_cast(&result[result.length()])}); + } + return std::make_pair(std::move(result), true); + } catch (std::exception const &e) { + return std::make_pair(std::string{"Error: "} + e.what(), false); } catch (winrt::hresult_error const &e) { return std::make_pair( "Error: " + Microsoft::Common::Unicode::Utf16ToUtf8(e.message().c_str(), e.message().size()), false); diff --git a/vnext/Shared/DevSupportManager.h b/vnext/Shared/DevSupportManager.h index 216bd6c4932..849ec08203b 100644 --- a/vnext/Shared/DevSupportManager.h +++ b/vnext/Shared/DevSupportManager.h @@ -10,7 +10,6 @@ #include #include #include -#include #include #include diff --git a/vnext/Shared/Modules/IWebSocketModuleContentHandler.h b/vnext/Shared/Modules/IWebSocketModuleContentHandler.h index 4d508603865..83a22841f46 100644 --- a/vnext/Shared/Modules/IWebSocketModuleContentHandler.h +++ b/vnext/Shared/Modules/IWebSocketModuleContentHandler.h @@ -18,11 +18,26 @@ namespace Microsoft::React { struct IWebSocketModuleContentHandler { virtual ~IWebSocketModuleContentHandler() noexcept {} + /// Returns true if this handler should process messages for the given socket. + virtual bool CanHandleSocket(int64_t socketId) noexcept = 0; + virtual void ProcessMessage(std::string &&message, winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept = 0; virtual void ProcessMessage( std::vector &&message, winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept = 0; + + /// Check CanHandleSocket() then ProcessMessage() in one call. + /// Returns true if the message was handled. + virtual bool TryProcessMessage( + int64_t socketId, + std::string &&message, + winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept = 0; + + virtual bool TryProcessMessage( + int64_t socketId, + std::vector &&message, + winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept = 0; }; } // namespace Microsoft::React diff --git a/vnext/Shared/Modules/WebSocketModule.cpp b/vnext/Shared/Modules/WebSocketModule.cpp index 7b0f5bb12a9..2d91ac86a40 100644 --- a/vnext/Shared/Modules/WebSocketModule.cpp +++ b/vnext/Shared/Modules/WebSocketModule.cpp @@ -83,6 +83,7 @@ shared_ptr WebSocketTurboModule::CreateResource(int64_t id, if (auto prop = propBag.Get(BlobModuleContentHandlerPropertyId())) contentHandler = prop.Value().lock(); + bool handled = false; if (contentHandler) { if (isBinary) { auto buffer = CryptographicBuffer::DecodeFromBase64String(winrt::to_hstring(message)); @@ -90,11 +91,15 @@ shared_ptr WebSocketTurboModule::CreateResource(int64_t id, CryptographicBuffer::CopyToByteArray(buffer, arr); auto data = vector(arr.begin(), arr.end()); - contentHandler->ProcessMessage(std::move(data), args); + handled = contentHandler->TryProcessMessage(id, std::move(data), args); } else { - contentHandler->ProcessMessage(string{message}, args); + handled = contentHandler->TryProcessMessage(id, string{message}, args); } - } else { + } + // When the content handler processes the message, it takes ownership of the + // payload and populates args itself (e.g. as a blob reference), so we only + // fall back to setting args["data"] when no handler claimed the message. + if (!handled) { args["data"] = message; } diff --git a/vnext/Shared/Networking/DefaultBlobResource.cpp b/vnext/Shared/Networking/DefaultBlobResource.cpp index 31fdfd6b061..bd408c72843 100644 --- a/vnext/Shared/Networking/DefaultBlobResource.cpp +++ b/vnext/Shared/Networking/DefaultBlobResource.cpp @@ -221,6 +221,11 @@ BlobWebSocketModuleContentHandler::BlobWebSocketModuleContentHandler(shared_ptr< #pragma region IWebSocketModuleContentHandler +bool BlobWebSocketModuleContentHandler::CanHandleSocket(int64_t socketId) noexcept /*override*/ { + scoped_lock lock{m_mutex}; + return m_socketIds.find(socketId) != m_socketIds.end(); +} + void BlobWebSocketModuleContentHandler::ProcessMessage( string &&message, msrn::JSValueObject ¶ms) noexcept /*override*/ @@ -241,6 +246,38 @@ void BlobWebSocketModuleContentHandler::ProcessMessage( params[blobKeys.Type] = blobKeys.Blob; } +bool BlobWebSocketModuleContentHandler::TryProcessMessage( + int64_t socketId, + string &&message, + msrn::JSValueObject ¶ms) noexcept /*override*/ +{ + scoped_lock lock{m_mutex}; + if (m_socketIds.find(socketId) == m_socketIds.end()) + return false; + + params[blobKeys.Data] = std::move(message); + return true; +} + +bool BlobWebSocketModuleContentHandler::TryProcessMessage( + int64_t socketId, + vector &&message, + msrn::JSValueObject ¶ms) noexcept /*override*/ +{ + scoped_lock lock{m_mutex}; + if (m_socketIds.find(socketId) == m_socketIds.end()) + return false; + + auto blob = msrn::JSValueObject{ + {blobKeys.Offset, 0}, + {blobKeys.Size, message.size()}, + {blobKeys.BlobId, m_blobPersistor->StoreMessage(std::move(message))}}; + + params[blobKeys.Data] = std::move(blob); + params[blobKeys.Type] = blobKeys.Blob; + return true; +} + #pragma endregion IWebSocketModuleContentHandler void BlobWebSocketModuleContentHandler::Register(int64_t socketID) noexcept { diff --git a/vnext/Shared/Networking/DefaultBlobResource.h b/vnext/Shared/Networking/DefaultBlobResource.h index 4dfdf5f18aa..9b268912462 100644 --- a/vnext/Shared/Networking/DefaultBlobResource.h +++ b/vnext/Shared/Networking/DefaultBlobResource.h @@ -51,11 +51,23 @@ class BlobWebSocketModuleContentHandler final : public IWebSocketModuleContentHa #pragma region IWebSocketModuleContentHandler + bool CanHandleSocket(int64_t socketId) noexcept override; + void ProcessMessage(std::string &&message, winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept override; void ProcessMessage(std::vector &&message, winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept override; + bool TryProcessMessage( + int64_t socketId, + std::string &&message, + winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept override; + + bool TryProcessMessage( + int64_t socketId, + std::vector &&message, + winrt::Microsoft::ReactNative::JSValueObject ¶ms) noexcept override; + #pragma endregion IWebSocketModuleContentHandler void Register(int64_t socketID) noexcept; diff --git a/vnext/Shared/Networking/WinRTWebSocketResource.h b/vnext/Shared/Networking/WinRTWebSocketResource.h index 8ebdd3b14d0..eafb1c6fbe9 100644 --- a/vnext/Shared/Networking/WinRTWebSocketResource.h +++ b/vnext/Shared/Networking/WinRTWebSocketResource.h @@ -27,8 +27,12 @@ class WinRTWebSocketResource2 : public IWebSocketResource, void operator=(const TaskSequencer &) = delete; private: +// `experimental` is deprecated starting Visual Studio 2026 +#if _MSC_VER >= 1951 + using CoroHandle = std::coroutine_handle<>; +#else using CoroHandle = std::experimental::coroutine_handle<>; - +#endif struct Suspender { CoroHandle m_handle; diff --git a/vnext/TestWebSite/Microsoft.ReactNative.Test.Website.csproj b/vnext/TestWebSite/Microsoft.ReactNative.Test.Website.csproj index 7d08141d444..0987f9be3a6 100644 --- a/vnext/TestWebSite/Microsoft.ReactNative.Test.Website.csproj +++ b/vnext/TestWebSite/Microsoft.ReactNative.Test.Website.csproj @@ -3,7 +3,7 @@ AnyCPU AnyCPU - net8.0 + net10.0 enable enable $(IntDir)$(TargetFramework)\ diff --git a/vnext/TestWebSite/packages.lock.json b/vnext/TestWebSite/packages.lock.json index 807ab822b67..4a91a8cd78f 100644 --- a/vnext/TestWebSite/packages.lock.json +++ b/vnext/TestWebSite/packages.lock.json @@ -1,6 +1,6 @@ { "version": 1, "dependencies": { - "net8.0": {} + "net10.0": {} } } \ No newline at end of file diff --git a/vnext/TestWebSite/wwwroot/static/sample.txt b/vnext/TestWebSite/wwwroot/static/sample.txt index 5bd282c8887..47e646f426f 100644 --- a/vnext/TestWebSite/wwwroot/static/sample.txt +++ b/vnext/TestWebSite/wwwroot/static/sample.txt @@ -1 +1 @@ -Sample Static Text File +Sample Static Text File \ No newline at end of file diff --git a/vnext/dotnet-tools.json b/vnext/dotnet-tools.json new file mode 100644 index 00000000000..2468cbda2de --- /dev/null +++ b/vnext/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "powershell": { + "version": "7.6.1", + "commands": [ + "pwsh" + ] + } + } +} \ No newline at end of file diff --git a/vnext/just-task.js b/vnext/just-task.js index e3fb44c76b1..ef22fe5fbbd 100644 --- a/vnext/just-task.js +++ b/vnext/just-task.js @@ -25,6 +25,7 @@ const fs = require('fs'); const { registerNuGetRestoreTask, } = require('@rnw-scripts/just-task/nuget-restore-task'); +const {findPowerShell} = require('@react-native-windows/find-dotnet-tools'); option('production'); option('clean'); @@ -46,9 +47,9 @@ function codegen(test) { function layoutMSRNCxx() { if (require('os').platform() === 'win32') { - const powershell = `${process.env.SystemRoot}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`; + const powershell = findPowerShell(); execSync( - `${powershell} -NoProfile .\\Scripts\\Tfs\\Layout-MSRN-Headers.ps1 -GenerateLocalCxx`, + `"${powershell}" -NoProfile .\\Scripts\\Tfs\\Layout-MSRN-Headers.ps1 -GenerateLocalCxx`, { env: process.env, }, @@ -84,12 +85,22 @@ registerNuGetRestoreTask({ scriptArguments: ['-SkipLockDeletion'], }); +function installDotnetToolsTask() { + execSync( + `dotnet tool restore --tool-manifest ${path.resolve(__dirname, 'dotnet-tools.json')}`, + {env: process.env}, + ); +} + +task('installDotnetTools', installDotnetToolsTask); + task( 'build', series( condition('clean', () => argv().clean), 'copyRNLibraries', 'copyReadmeAndLicenseFromRoot', + condition('installDotnetTools', () => !process.env.TF_BUILD), 'layoutMSRNCxx', 'compileTsPlatformOverrides', 'restoreNuGetPackages', diff --git a/vnext/overrides.json b/vnext/overrides.json index 833e93f73fb..a2e5329aefa 100644 --- a/vnext/overrides.json +++ b/vnext/overrides.json @@ -333,19 +333,19 @@ }, { "type": "platform", - "file": "src-win/IntegrationTests/websocket_integration_test_server_binary.js" + "file": "src-win/IntegrationTests/WebSocketArrayBufferTest.js" }, { "type": "platform", - "file": "src-win/IntegrationTests/websocket_integration_test_server_blob.js" + "file": "src-win/IntegrationTests/WebSocketBinaryTest.js" }, { "type": "platform", - "file": "src-win/IntegrationTests/WebSocketBinaryTest.js" + "file": "src-win/IntegrationTests/WebSocketBlobTest.js" }, { "type": "platform", - "file": "src-win/IntegrationTests/WebSocketBlobTest.js" + "file": "src-win/IntegrationTests/WebSocketTest.js" }, { "type": "platform", diff --git a/vnext/src-win/IntegrationTests/BlobTest.js b/vnext/src-win/IntegrationTests/BlobTest.js index 47cf5ecb81e..363ee3c99f7 100644 --- a/vnext/src-win/IntegrationTests/BlobTest.js +++ b/vnext/src-win/IntegrationTests/BlobTest.js @@ -2,115 +2,78 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * @format - * @flow */ 'use strict'; -const React = require('react'); -const ReactNative = require('react-native'); +const {TurboModuleRegistry} = require('react-native'); -const {AppRegistry, View} = ReactNative; +const TestModule = TurboModuleRegistry.get('TestModule'); -const {TestModule} = ReactNative.NativeModules; - -type State = { - statusCode: number, - xhr: XMLHttpRequest, - expected: string, -}; - -class BlobTest extends React.Component<{...}, State> { - state: State = { - statusCode: 0, - xhr: new XMLHttpRequest(), - // http://localhost:5555/static/react.png - // cspell:disable - expected: - 'data:application/octet-stream;base64,' + - 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAABbWlDQ1BpY2MAACiRdZG9S0JR' + - 'GMZ/alGk4VBDRJCDRYNCFEhj2dAiIWaQ1aLXr0Cvl3uViNagpUFoiFr6GvoPag1aC4KgCCLa' + - '2vtaQm7vUUGJOpdz3x/POc/Le58LzkhBK1od01DUy2ZsLuxbSiz7ul5x48RFiOGkZhkz0WiE' + - 'f9fXPQ5V74Kq1//3/lzudMbSwNEtHNIMsyws0xBZLxuKd4T7tXwyLXwkHDBlQOFrpaca/KI4' + - '1+APxWY8NgtO1dOXa+NUG2t5syg8JuwvFipacx71JZ6MvrggdVD2EBYx5gjjI0WFNQqUCUrV' + - 'JbO/feN13zwl8WjyNtjAFEeOvHgDolaka0ZqVvSMPAU2VO6/87SykxON7p4wdD7b9vsIdO1C' + - 'rWrb38e2XTsB1xNc6i1/SXKa+hS92tL8h+DdgvOrlpbag4ttGHg0kmayLrlkO7NZeDuD3gT0' + - '3ULPSiOr5jmnDxDflF90A/sHMCr3vas/DkpoELlQjWUAAAAJcEhZcwAAnXsAAJ17ATyfd8QA' + - 'AARxSURBVDgRbVRbbFRVFN373Hs7fSBorI/S2FLK9GETQgHjBwlg+fABQT78METKTBtrookR' + - 'QgJFDcUP2wRiUKMfVZnCxBq1Rk0MyA81fjQxhQKJ2naGUDum8a1AW9qZe+/ZrjP0NreOJzmz' + - 'z36te86avTfT/6y2tHtIhPbD5WIPiGN399Xwr0FobELuZ9frhP4UtsNMb5yMOj2BP5AqOASy' + - 'PZ1rBvBeYrsJoE2wT3POuxRPeTtMjJFGx/Fm3m/iEB9L5dYZf3jZYcWcRXOLECX76viPBd8r' + - 'e9PZj5SogXja3Uoi20npbYlo5McgNzbuJhXxNuiXA5uRBTfXROWK83Qsxp2KRn4QVm+T8IvE' + - '6q0wsAkCLZ7JW0xYOBSAK0U3NFNpOBA33sKiO4W87XjaYaOH/SxUavLCNnMuoIU0X1GsW48M' + - 'ij1Zla1R2qoxNIEOPN1ai/PHxPRJLOU+Q5b/U3UmMvEzu/Wa+dR/wTlsiI/PrRZVtBO37AbA' + - 'LAn9gl2Od8/g6YP4R6ZBwh0iukWEy2D7EwAV+GAZaOu0/dyX7zeUTASYefD2a1KtXfcYAB9i' + - '5n4A7mCL9vs+r2CSHqfMXtdbybeCpD1XpMwu8S8D9CB5Mq0sOU6KvxKR3cgd9mznQLKWM6pt' + - 'LLfR9/xBVjQkjtOIen0ZnPeLx0/iy8eEqaN3Jc3Fx92j2BeMTK6lW6ykw/jZ4p3C/KHJM/kG' + - 'x/L9bwwux1PuCGk6kGhwzgc3ax2Vuy3Lvwaev0/UO5vaUrmYECcCP14TP1lX1BdPe0OIafJ9' + - 'e/XpRv4r8MfH3BbU4XFTLdUSsUcCh5GnG+hviCwAM0aHrDUyWCE9A2d2IT5w0wJeFaMBulFG' + - 'DbayY721nC8nlNqjSHod0atUzo761vxytuzvoN+L/bv43sOaiqcty0uBmklQ15mIOucMOkbD' + - 'ncrzElrTGJuSy1R6XbA/Syw9YjsJdt0TLOo8kjbB7ifq7OfzSb7XrC37EubMdYyBd+GzcIkh' + - 'xG0lx9pHOa8NFXQQ9veqpuyufLVAofar82t8sV9CQzyGRqkSpZIW6Ytacxca+TVluV9ridxQ' + - 'nF3ha/U4C79qKTnikdrIWu9B52ZQbWcVe29+sKb4qsFcBDeKWfF09kES1S8svaTVejDeiNts' + - 'QOgUzsshb+IPrcSwugjuRzFnRnD753ySp5N1kdHbKLd/CzoUN9qM+j3XFy0yz84vVNQJIn3P' + - 'TNRpXZZ2k5r4t756Z1/gR7eucoi2QF8CXjBbkLgSN7keJBo5U2J3YmhVLEt7F9Ct982W2IfD' + - 'fhOPjq1YYoNSAA7O0ckyFw789AGeA4HDoKca9uG8Hgow8eAXD166CsANj4hqDsJax6UStHwG' + - 'fb1datcBYgNoGDD2IIY1NePFY4EeyII/tGNKSt1ZbwQz5lst5LPILtz6HZRWz9FH2Fso3UP4' + - 'yAto+y8w+y3MlM2grrngRcFXwrJjXMpdcnexUnPzRdaZ/mr+J+w3592Tcldxzn9CtC7xtfN5' + - 'uP2D2H8BsGL5W7blULYAAAAASUVORK5CYII=', - // cspell:enable - }; +if (!TestModule) { + throw new Error('TestModule is not available'); +} - _get = () => { - this.state.xhr.onloadend = () => { - this.setState({ - statusCode: this.state.xhr.status, - }); - }; - this.state.xhr.open('GET', 'http://localhost:5555/static/react.png'); - this.state.xhr.setRequestHeader('Accept-Encoding', 'utf-8'); - this.state.xhr.responseType = 'blob'; - this.state.xhr.send(); - }; +const URL = 'http://localhost:5555/static/react.png'; - _getSucceeded = (): boolean => { - return this.state.statusCode === 200 && this.state.xhr.response !== null; - }; +// cspell:disable +const EXPECTED_DATA_URL = + 'data:application/octet-stream;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAABbWlDQ1BpY2MAACiRdZG9S0JR' + + 'GMZ/alGk4VBDRJCDRYNCFEhj2dAiIWaQ1aLXr0Cvl3uViNagpUFoiFr6GvoPag1aC4KgCCLa' + + '2vtaQm7vUUGJOpdz3x/POc/Le58LzkhBK1od01DUy2ZsLuxbSiz7ul5x48RFiOGkZhkz0WiE' + + 'f9fXPQ5V74Kq1//3/lzudMbSwNEtHNIMsyws0xBZLxuKd4T7tXwyLXwkHDBlQOFrpaca/KI4' + + '1+APxWY8NgtO1dOXa+NUG2t5syg8JuwvFipacx71JZ6MvrggdVD2EBYx5gjjI0WFNQqUCUrV' + + 'JbO/feN13zwl8WjyNtjAFEeOvHgDolaka0ZqVvSMPAU2VO6/87SykxON7p4wdD7b9vsIdO1C' + + 'rWrb38e2XTsB1xNc6i1/SXKa+hS92tL8h+DdgvOrlpbag4ttGHg0kmayLrlkO7NZeDuD3gT0' + + '3ULPSiOr5jmnDxDflF90A/sHMCr3vas/DkpoELlQjWUAAAAJcEhZcwAAnXsAAJ17ATyfd8QA' + + 'AARxSURBVDgRbVRbbFRVFN373Hs7fSBorI/S2FLK9GETQgHjBwlg+fABQT78METKTBtrookR' + + 'QgJFDcUP2wRiUKMfVZnCxBq1Rk0MyA81fjQxhQKJ2naGUDum8a1AW9qZe+/ZrjP0NreOJzmz' + + 'z36te86avTfT/6y2tHtIhPbD5WIPiGN399Xwr0FobELuZ9frhP4UtsNMb5yMOj2BP5AqOASy' + + 'PZ1rBvBeYrsJoE2wT3POuxRPeTtMjJFGx/Fm3m/iEB9L5dYZf3jZYcWcRXOLECX76viPBd8r' + + 'e9PZj5SogXja3Uoi20npbYlo5McgNzbuJhXxNuiXA5uRBTfXROWK83Qsxp2KRn4QVm+T8IvE' + + '6q0wsAkCLZ7JW0xYOBSAK0U3NFNpOBA33sKiO4W87XjaYaOH/SxUavLCNnMuoIU0X1GsW48M' + + 'ij1Zla1R2qoxNIEOPN1ai/PHxPRJLOU+Q5b/U3UmMvEzu/Wa+dR/wTlsiI/PrRZVtBO37AbA' + + 'LAn9gl2Od8/g6YP4R6ZBwh0iukWEy2D7EwAV+GAZaOu0/dyX7zeUTASYefD2a1KtXfcYAB9i' + + '5n4A7mCL9vs+r2CSHqfMXtdbybeCpD1XpMwu8S8D9CB5Mq0sOU6KvxKR3cgd9mznQLKWM6pt' + + 'LLfR9/xBVjQkjtOIen0ZnPeLx0/iy8eEqaN3Jc3Fx92j2BeMTK6lW6ykw/jZ4p3C/KHJM/kG' + + 'x/L9bwwux1PuCGk6kGhwzgc3ax2Vuy3Lvwaev0/UO5vaUrmYECcCP14TP1lX1BdPe0OIafJ9' + + 'e/XpRv4r8MfH3BbU4XFTLdUSsUcCh5GnG+hviCwAM0aHrDUyWCE9A2d2IT5w0wJeFaMBulFG' + + 'DbayY721nC8nlNqjSHod0atUzo761vxytuzvoN+L/bv43sOaiqcty0uBmklQ15mIOucMOkbD' + + 'ncrzElrTGJuSy1R6XbA/Syw9YjsJdt0TLOo8kjbB7ifq7OfzSb7XrC37EubMdYyBd+GzcIkh' + + 'xG0lx9pHOa8NFXQQ9veqpuyufLVAofar82t8sV9CQzyGRqkSpZIW6Ytacxca+TVluV9ridxQ' + + 'nF3ha/U4C79qKTnikdrIWu9B52ZQbWcVe29+sKb4qsFcBDeKWfF09kES1S8svaTVejDeiNts' + + 'QOgUzsshb+IPrcSwugjuRzFnRnD753ySp5N1kdHbKLd/CzoUN9qM+j3XFy0yz84vVNQJIn3P' + + 'TNRpXZZ2k5r4t756Z1/gR7eucoi2QF8CXjBbkLgSN7keJBo5U2J3YmhVLEt7F9Ct982W2IfD' + + 'fhOPjq1YYoNSAA7O0ckyFw789AGeA4HDoKca9uG8Hgow8eAXD166CsANj4hqDsJax6UStHwG' + + 'fb1datcBYgNoGDD2IIY1NePFY4EeyII/tGNKSt1ZbwQz5lst5LPILtz6HZRWz9FH2Fso3UP4' + + 'yAto+y8w+y3MlM2grrngRcFXwrJjXMpdcnexUnPzRdaZ/mr+J+w3592Tcldxzn9CtC7xtfN5' + + 'uP2D2H8BsGL5W7blULYAAAAASUVORK5CYII='; +// cspell:enable - _waitFor = (condition: any, timeout: any, callback: any) => { - let remaining = timeout; - const timeoutFunction = function () { - if (condition()) { - callback(true); - return; - } - remaining--; - if (remaining === 0) { - callback(false); - } else { - setTimeout(timeoutFunction, 1000); - } - }; - setTimeout(timeoutFunction, 1000); - }; +const xhr = new XMLHttpRequest(); +xhr.responseType = 'blob'; - componentDidMount() { - this._get(); - this._waitFor(this._getSucceeded, 6, doneSucceeded => { - let reader = new FileReader(); - reader.readAsDataURL(this.state.xhr.response); - reader.onload = () => { - TestModule.markTestPassed( - doneSucceeded && this.state.expected === reader.result, - ); - }; - }); +xhr.onloadend = () => { + const succeeded = xhr.status === 200 && xhr.response !== null; + if (!succeeded) { + TestModule.markTestPassed(false); + return; } - render(): React.Node { - return ; - } -} + const reader = new FileReader(); + reader.onload = () => { + TestModule.markTestPassed(reader.result === EXPECTED_DATA_URL); + }; + reader.onerror = () => { + TestModule.markTestPassed(false); + }; + reader.readAsDataURL(xhr.response); +}; -AppRegistry.registerComponent('BlobTest', () => BlobTest); +xhr.onerror = () => { + TestModule.markTestPassed(false); +}; -module.exports = BlobTest; +xhr.open('GET', URL); +xhr.setRequestHeader('Accept-Encoding', 'utf-8'); +xhr.send(); diff --git a/vnext/src-win/IntegrationTests/FetchTest.js b/vnext/src-win/IntegrationTests/FetchTest.js index 79c666fa581..ff645f5516a 100644 --- a/vnext/src-win/IntegrationTests/FetchTest.js +++ b/vnext/src-win/IntegrationTests/FetchTest.js @@ -2,52 +2,27 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * @format - * @flow */ 'use strict'; -const React = require('react'); -const ReactNative = require('react-native'); +const {TurboModuleRegistry} = require('react-native'); -const {AppRegistry, View} = ReactNative; +const TestModule = TurboModuleRegistry.get('TestModule'); -const {TestModule} = ReactNative.NativeModules; - -const uri = - 'https://raw.githubusercontent.com/microsoft/react-native-windows/main/.yarnrc.yml'; -const expectedContent = 'enableScripts: false'; - -type State = { - uri: string, - expected: string, - content: string, -}; - -class FetchTest extends React.Component<{...}, State> { - state: State = { - uri: 'https://raw.githubusercontent.com/microsoft/react-native-windows/main/.yarnrc.yml', - expected: 'enableScripts: false', - content: '', - }; - - async componentDidMount() { - const response = await fetch(uri); - const text = await response.text(); - this.setState({content: text}); - - if (this.state.content === expectedContent) { - TestModule.markTestPassed(true); - } else { - TestModule.markTestPassed(false); - } - } - - render(): React.Node { - return ; - } +if (!TestModule) { + throw new Error('TestModule is not available'); } -AppRegistry.registerComponent('FetchTest', () => FetchTest); - -module.exports = FetchTest; +const URL = 'http://localhost:5555/static/sample.txt'; +const EXPECTED_CONTENT = 'Sample Static Text File'; + +fetch(URL) + .then(response => response.text()) + .then(text => { + const passed = text === EXPECTED_CONTENT; + TestModule.markTestPassed(passed); + }) + .catch(() => { + TestModule.markTestPassed(false); + }); diff --git a/vnext/src-win/IntegrationTests/WebSocketArrayBufferTest.js b/vnext/src-win/IntegrationTests/WebSocketArrayBufferTest.js new file mode 100644 index 00000000000..50360b90b55 --- /dev/null +++ b/vnext/src-win/IntegrationTests/WebSocketArrayBufferTest.js @@ -0,0 +1,76 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * @format + */ + +'use strict'; + +const {TurboModuleRegistry} = require('react-native'); +const TestModule = TurboModuleRegistry.get('TestModule'); + +if (!TestModule) { + throw new Error('TestModule is not available'); +} + +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const WS_URL = 'ws://localhost:5555/rnw/rntester/websocketbinarytest'; + +const socket = new WebSocket(WS_URL); +socket.binaryType = 'arraybuffer'; + +socket.addEventListener('open', () => { + socket.send('hello'); +}); + +socket.addEventListener('message', event => { + const data = event.data; + + if (!(data instanceof ArrayBuffer)) { + console.log( + 'WebSocketArrayBufferTest FAIL: expected ArrayBuffer, got ' + typeof data, + ); + TestModule.markTestPassed(false); + socket.close(); + return; + } + + const bytes = new Uint8Array(data); + const expected = new Uint8Array([4, 5, 6, 7]); + + if (bytes.length !== expected.length) { + console.log( + 'WebSocketArrayBufferTest FAIL: expected ' + + expected.length + + ' bytes, got ' + + bytes.length, + ); + TestModule.markTestPassed(false); + socket.close(); + return; + } + + for (let i = 0; i < expected.length; i++) { + if (bytes[i] !== expected[i]) { + console.log( + 'WebSocketArrayBufferTest FAIL: byte[' + + i + + '] expected ' + + expected[i] + + ' got ' + + bytes[i], + ); + TestModule.markTestPassed(false); + socket.close(); + return; + } + } + + TestModule.markTestPassed(true); + socket.close(); +}); + +socket.addEventListener('error', () => { + console.log('WebSocketArrayBufferTest FAIL: WebSocket error'); + TestModule.markTestPassed(false); +}); diff --git a/vnext/src-win/IntegrationTests/WebSocketBlobTest.js b/vnext/src-win/IntegrationTests/WebSocketBlobTest.js index 7b18bfe2c07..1b7b675276b 100644 --- a/vnext/src-win/IntegrationTests/WebSocketBlobTest.js +++ b/vnext/src-win/IntegrationTests/WebSocketBlobTest.js @@ -1,159 +1,121 @@ /** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. * @format - * @flow */ 'use strict'; -const React = require('react'); -const ReactNative = require('react-native'); -const {AppRegistry, View} = ReactNative; -const {TestModule} = ReactNative.NativeModules; +const {TurboModuleRegistry} = require('react-native'); +const TestModule = TurboModuleRegistry.get('TestModule'); -// eslint-disable-next-line @microsoft/sdl/no-insecure-url -const DEFAULT_WS_URL = 'ws://localhost:5555/rnw/rntester/websocketbinarytest'; - -const WS_EVENTS = ['close', 'error', 'message', 'open']; - -type State = { - url: string, - fetchStatus: ?string, - socket: ?WebSocket, - socketState: ?number, - lastSocketEvent: ?string, - lastMessage: ?Blob, - testMessage: Uint8Array, - testExpectedResponse: Uint8Array, - ... -}; - -class WebSocketBlobTest extends React.Component<{}, State> { - state: State = { - url: DEFAULT_WS_URL, - fetchStatus: null, - socket: null, - socketState: null, - lastSocketEvent: null, - lastMessage: null, - testMessage: new Uint8Array([1, 2, 3]), - testExpectedResponse: new Uint8Array([4, 5, 6, 7]), - }; +if (!TestModule) { + throw new Error('TestModule is not available'); +} - _waitFor = (condition: any, timeout: any, callback: any) => { - let remaining = timeout; - const timeoutFunction = function () { - if (condition()) { - callback(true); - return; - } - remaining--; - if (remaining === 0) { - callback(false); - } else { - setTimeout(timeoutFunction, 1000); - } - }; - setTimeout(timeoutFunction, 1000); - }; +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const WS_URL = 'ws://localhost:5555/rnw/rntester/websocketbinarytest'; +const TEST_MESSAGE = new Uint8Array([1, 2, 3]); +// Expected bytes come from RNTesterIntegrationTests.WebSocketBinaryTest outgoingBytes. +const EXPECTED_BYTES = new Uint8Array([4, 5, 6, 7]); +const EXPECTED_SIZE = EXPECTED_BYTES.length; + +let completed = false; +const socket = new WebSocket(WS_URL); +socket.binaryType = 'blob'; + +const timeoutId = setTimeout(() => { + complete(false, 'timeout waiting for websocket response'); +}, 10000); + +function complete(passed, reason) { + if (completed) { + return; + } - _connect = () => { - const socket = new WebSocket(this.state.url); - socket.binaryType = 'blob'; - WS_EVENTS.forEach(ev => socket.addEventListener(ev, this._onSocketEvent)); - this.setState({ - socket, - socketState: socket.readyState, - }); - }; + completed = true; + clearTimeout(timeoutId); - _socketIsConnected = (): boolean => { - return this.state.socketState === 1; //'OPEN' - }; + if (!passed && reason) { + console.log('WebSocketBlobTest FAIL: ' + reason); + } - _socketIsDisconnected = (): boolean => { - return this.state.socketState === 3; //'CLOSED' - }; + TestModule.markTestPassed(passed); +} - _disconnect = () => { - if (!this.state.socket) { - return; - } - this.state.socket.close(); - }; +function decodeBlobToBytes(blob, onSuccess, onError) { + if (typeof blob.arrayBuffer === 'function') { + blob + .arrayBuffer() + .then(buffer => onSuccess(new Uint8Array(buffer))) + .catch(onError); + return; + } - _onSocketEvent = (event: any) => { - const state: any = { - socketState: event.target.readyState, - lastSocketEvent: event.type, - }; - if (event.type === 'message') { - state.lastMessage = event.data; - } - this.setState(state); + const reader = new FileReader(); + reader.onload = () => { + onSuccess(new Uint8Array(reader.result)); }; - - _sendBinary = (message: Uint8Array) => { - if (!this.state.socket) { - return; - } - this.state.socket.send(message); + reader.onerror = () => { + onError(reader.error || new Error('failed to read blob')); }; + reader.readAsArrayBuffer(blob); +} - _sendTestMessage = () => { - this._sendBinary(this.state.testMessage); - }; +socket.addEventListener('open', () => { + socket.send(TEST_MESSAGE); +}); - _receivedTestExpectedResponse = (): boolean => { - // Can't iterate through Blob response. Blob.arrayBuffer() not supported. - return ( - this.state.lastMessage?.size === this.state.testExpectedResponse.length - ); - }; +socket.addEventListener('message', event => { + const data = event.data; - componentDidMount() { - this.testConnect(); + if (!(data instanceof Blob)) { + complete(false, 'expected Blob response'); + socket.close(); + return; } - testConnect: () => void = () => { - this._connect(); - this._waitFor(this._socketIsConnected, 5, connectSucceeded => { - if (!connectSucceeded) { - TestModule.markTestPassed(false); - return; - } - this.testSendAndReceive(); - }); - }; + if (data.size !== EXPECTED_SIZE) { + complete(false, 'unexpected response size'); + socket.close(); + return; + } - testSendAndReceive: () => void = () => { - this._sendTestMessage(); - this._waitFor(this._receivedTestExpectedResponse, 5, messageReceived => { - if (!messageReceived) { - TestModule.markTestPassed(false); - return; + decodeBlobToBytes( + data, + bytes => { + for (let i = 0; i < EXPECTED_BYTES.length; i++) { + if (bytes[i] !== EXPECTED_BYTES[i]) { + complete( + false, + 'unexpected response byte at index ' + + i + + ': expected ' + + EXPECTED_BYTES[i] + + ', got ' + + bytes[i], + ); + socket.close(); + return; + } } - this.testDisconnect(); - }); - }; - testDisconnect: () => void = () => { - this._disconnect(); - this._waitFor(this._socketIsDisconnected, 5, disconnectSucceeded => { - TestModule.markTestPassed(disconnectSucceeded); - }); - }; - render(): React.Node { - return ; + complete(true); + socket.close(); + }, + error => { + complete(false, 'failed to decode blob: ' + String(error)); + socket.close(); + }, + ); +}); + +socket.addEventListener('error', () => { + complete(false, 'websocket error'); +}); + +socket.addEventListener('close', () => { + if (!completed) { + complete(false, 'socket closed before completing test'); } -} // class WebSocketBlobTest - -WebSocketBlobTest.displayName = 'WebSocketBlobTest'; - -AppRegistry.registerComponent('WebSocketBlobTest', () => WebSocketBlobTest); - -module.exports = WebSocketBlobTest; +}); diff --git a/vnext/src-win/IntegrationTests/WebSocketMultipleSendTest.js b/vnext/src-win/IntegrationTests/WebSocketMultipleSendTest.js index e3658cdab96..afaa789368f 100644 --- a/vnext/src-win/IntegrationTests/WebSocketMultipleSendTest.js +++ b/vnext/src-win/IntegrationTests/WebSocketMultipleSendTest.js @@ -10,7 +10,6 @@ * LICENSE file in the root directory of this source tree. * * @format - * @flow */ /* @@ -25,10 +24,13 @@ Array.from('abcdef').forEach( e => { ws.send(e.repeat(1025)) }); 'use strict'; -const React = require('react'); -const ReactNative = require('react-native'); -const {AppRegistry, View} = ReactNative; -const {TestModule} = ReactNative.NativeModules; +const {TurboModuleRegistry} = require('react-native'); + +const TestModule = TurboModuleRegistry.get('TestModule'); + +if (!TestModule) { + throw new Error('TestModule is not available'); +} // eslint-disable-next-line @microsoft/sdl/no-insecure-url const URL_BASE = 'ws://localhost:5555/rnw/rntester/websocketmultiplesendtest'; @@ -41,131 +43,90 @@ const EXPECTED = 'abcdef'; const ID = Math.floor(Math.random() * 1000000); -type State = { - sendUrl: string, - receiveUrl: string, - sendSocket: ?WebSocket, - receiveSocket: ?WebSocket, - result: ?string, -}; - -class WebSocketMultipleSendTest extends React.Component<{}, State> { - state: State = { - sendUrl: `${URL_BASE}/send/${ID}`, - receiveUrl: `${URL_BASE}/receive/${ID}`, - sendSocket: null, - receiveSocket: null, - result: '', - }; +const sendUrl = `${URL_BASE}/send/${ID}`; +const receiveUrl = `${URL_BASE}/receive/${ID}`; - _waitFor = (condition: any, timeout: any, callback: any) => { - let remaining = timeout; - const timeoutFunction = function () { - if (condition()) { - callback(true); - return; - } - remaining--; - if (remaining === 0) { - callback(false); - } else { - setTimeout(timeoutFunction, 1000); - } - }; - setTimeout(timeoutFunction, 1000); - }; +let sendSocket = null; +let receiveSocket = null; +let result = ''; - _socketsAreConnected = (): boolean => { - return ( - this.state.sendSocket?.readyState === 1 && - this.state.sendSocket?.readyState === 1 - ); // OPEN +const waitFor = (condition, timeout, callback) => { + let remaining = timeout; + const timeoutFunction = function () { + if (condition()) { + callback(true); + return; + } + remaining--; + if (remaining === 0) { + callback(false); + } else { + setTimeout(timeoutFunction, 1000); + } }; + setTimeout(timeoutFunction, 1000); +}; - _socketsAreDisconnected = (): boolean => { - return ( - this.state.sendSocket?.readyState === 3 && - this.state.sendSocket?.readyState === 3 - ); // CLOSED - }; +const socketsAreConnected = () => { + return sendSocket?.readyState === 1 && sendSocket?.readyState === 1; // OPEN +}; - _resultIsComplete = (): boolean => { - return this.state.result === EXPECTED; - }; +const socketsAreDisconnected = () => { + return sendSocket?.readyState === 3 && sendSocket?.readyState === 3; // CLOSED +}; - _disconnect = () => { - if (this.state.receiveSocket) { - this.state.receiveSocket.close(); - } - }; +const resultIsComplete = () => { + return result === EXPECTED; +}; - testDisconnect: () => void = () => { - this._disconnect(); - this._waitFor(this._socketsAreDisconnected, 5, disconnectSucceeded => { - TestModule.markTestPassed(disconnectSucceeded); - }); - }; +const disconnect = () => { + if (receiveSocket) { + receiveSocket.close(); + } +}; - testSendMultipleAndClose: () => void = () => { - this.state.sendSocket?.send('a'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.send('b'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.send('c'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.send('d'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.send('e'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.send('f'.repeat(MESSAGE_SIZE)); - this.state.sendSocket?.close(); - - this._waitFor(this._resultIsComplete, 5, resultComplete => { - if (!resultComplete) { - TestModule.markTestPassed(false); - return; - } - this.testDisconnect(); - }); - }; +const testDisconnect = () => { + disconnect(); + waitFor(socketsAreDisconnected, 5, disconnectSucceeded => { + TestModule.markTestPassed(disconnectSucceeded); + }); +}; - _onSocketEvent = (event: any) => { - if (event.type === 'message' && event.data.length) { - var message = this.state.result + event.data[0]; - this.setState({ - result: message, - }); +const testSendMultipleAndClose = () => { + sendSocket?.send('a'.repeat(MESSAGE_SIZE)); + sendSocket?.send('b'.repeat(MESSAGE_SIZE)); + sendSocket?.send('c'.repeat(MESSAGE_SIZE)); + sendSocket?.send('d'.repeat(MESSAGE_SIZE)); + sendSocket?.send('e'.repeat(MESSAGE_SIZE)); + sendSocket?.send('f'.repeat(MESSAGE_SIZE)); + sendSocket?.close(); + + waitFor(resultIsComplete, 5, resultComplete => { + if (!resultComplete) { + TestModule.markTestPassed(false); + return; } - }; - - _connect = () => { - const sendSocket = new WebSocket(this.state.sendUrl); - const receiveSocket = new WebSocket(this.state.receiveUrl); - WS_EVENTS.forEach(ev => - receiveSocket.addEventListener(ev, this._onSocketEvent), - ); - this.setState({ - sendSocket, - receiveSocket, - }); - }; - - componentDidMount() { - this._connect(); - this._waitFor(this._socketsAreConnected, 5, connectSucceeded => { - if (!connectSucceeded) { - TestModule.markTestPassed(false); - return; - } - this.testSendMultipleAndClose(); - }); - } + testDisconnect(); + }); +}; - render(): React.Node { - return ; +const onSocketEvent = event => { + if (event.type === 'message' && event.data.length) { + result += event.data[0]; } -} // class WebSocketMultipleSendTest - -WebSocketMultipleSendTest.displayName = 'WebSocketMultipleSendTest'; +}; -AppRegistry.registerComponent( - 'WebSocketMultipleSendTest', - () => WebSocketMultipleSendTest, -); +const connect = () => { + sendSocket = new WebSocket(sendUrl); + receiveSocket = new WebSocket(receiveUrl); + WS_EVENTS.forEach(ev => receiveSocket.addEventListener(ev, onSocketEvent)); +}; -module.exports = WebSocketMultipleSendTest; +connect(); +waitFor(socketsAreConnected, 5, connectSucceeded => { + if (!connectSucceeded) { + TestModule.markTestPassed(false); + return; + } + testSendMultipleAndClose(); +}); diff --git a/vnext/src-win/IntegrationTests/WebSocketTest.js b/vnext/src-win/IntegrationTests/WebSocketTest.js new file mode 100644 index 00000000000..b1975486599 --- /dev/null +++ b/vnext/src-win/IntegrationTests/WebSocketTest.js @@ -0,0 +1,82 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * @format + */ + +'use strict'; + +const {TurboModuleRegistry} = require('react-native'); +const TestModule = TurboModuleRegistry.get('TestModule'); + +if (!TestModule) { + throw new Error('TestModule is not available'); +} + +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const WS_URL = 'ws://localhost:5555/'; +const TEST_MESSAGE = 'testMessage'; +const EXPECTED_RESPONSE = 'testMessage_response'; +const INITIAL_SERVER_GREETING = 'hello'; + +let completed = false; +let messageSent = false; +const socket = new WebSocket(WS_URL); +const timeoutId = setTimeout(() => { + complete(false, 'timeout waiting for websocket response'); +}, 10000); + +function sendTestMessageIfNeeded() { + if (messageSent || socket.readyState !== WebSocket.OPEN) { + return; + } + + messageSent = true; + socket.send(TEST_MESSAGE); +} + +function complete(passed, reason) { + if (completed) { + return; + } + + completed = true; + clearTimeout(timeoutId); + + if (!passed && reason) { + console.log('WebSocketTest FAIL: ' + reason); + } + + TestModule.markTestPassed(passed); +} + +socket.addEventListener('open', () => { + sendTestMessageIfNeeded(); +}); + +socket.addEventListener('message', event => { + if (event.data === INITIAL_SERVER_GREETING) { + return; + } + + if (event.data !== EXPECTED_RESPONSE) { + complete(false, 'unexpected response payload'); + socket.close(); + return; + } + + complete(true); + socket.close(); +}); + +socket.addEventListener('error', () => { + complete(false, 'websocket error'); +}); + +socket.addEventListener('close', () => { + if (!completed) { + complete(false, 'socket closed before completing test'); + } +}); + +sendTestMessageIfNeeded(); diff --git a/vnext/src-win/IntegrationTests/XHRTest.js b/vnext/src-win/IntegrationTests/XHRTest.js index a03ba97c658..2b85a9a0f3d 100644 --- a/vnext/src-win/IntegrationTests/XHRTest.js +++ b/vnext/src-win/IntegrationTests/XHRTest.js @@ -2,81 +2,30 @@ * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * @format - * @flow */ 'use strict'; -const React = require('react'); -const ReactNative = require('react-native'); +const {TurboModuleRegistry} = require('react-native'); -const {AppRegistry, View} = ReactNative; +const TestModule = TurboModuleRegistry.get('TestModule'); -const {TestModule} = ReactNative.NativeModules; - -type State = { - statusCode: number, - xhr: XMLHttpRequest, -}; - -class XHRTest extends React.Component<{...}, State> { - state: State = { - statusCode: 0, - xhr: new XMLHttpRequest(), - }; - - _get = () => { - this.state.xhr.onloadend = () => { - this.setState({ - statusCode: this.state.xhr.status, - }); - }; - this.state.xhr.open( - 'GET', - 'https://raw.githubusercontent.com/microsoft/react-native-windows/react-native-windows_v0.67.1/NuGet.Config', - ); - this.state.xhr.setRequestHeader('Accept-Encoding', 'utf-8'); - this.state.xhr.send(); - }; - - _getSucceeded = (): boolean => { - console.log( - `_getSucceeded [${this.state.statusCode}],[${this.state.xhr.responseText.length}]`, - ); - return ( - this.state.statusCode === 200 && - this.state.xhr.responseText.length === 387 - ); - }; - - _waitFor = (condition: any, timeout: any, callback: any) => { - let remaining = timeout; - const timeoutFunction = function () { - if (condition()) { - callback(true); - return; - } - remaining--; - if (remaining === 0) { - callback(false); - } else { - setTimeout(timeoutFunction, 1000); - } - }; - setTimeout(timeoutFunction, 1000); - }; - - componentDidMount() { - this._get(); - this._waitFor(this._getSucceeded, 5, doneSucceeded => { - TestModule.markTestPassed(doneSucceeded); - }); - } - - render(): React.Node { - return ; - } +if (!TestModule) { + throw new Error('TestModule is not available'); } -AppRegistry.registerComponent('XHRTest', () => XHRTest); +const URL = 'http://localhost:5555/static/sample.txt'; +const EXPECTED_CONTENT = 'Sample Static Text File'; + +const xhr = new XMLHttpRequest(); +xhr.onloadend = () => { + const responseText = xhr.responseText || ''; + const passed = + xhr.status === 200 && responseText === EXPECTED_CONTENT; + TestModule.markTestPassed(passed); +}; +xhr.onerror = () => { + TestModule.markTestPassed(false); +}; -module.exports = XHRTest; +xhr.open('GET', URL); +xhr.send(); diff --git a/vnext/src-win/IntegrationTests/websocket_integration_test_server_binary.js b/vnext/src-win/IntegrationTests/websocket_integration_test_server_binary.js deleted file mode 100644 index 54583577d48..00000000000 --- a/vnext/src-win/IntegrationTests/websocket_integration_test_server_binary.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - */ - -'use strict'; - -/* eslint-env node */ - -const WebSocket = require('ws'); - -console.log(`\ -WebSocket binary integration test server - -This will send each incoming message back, in binary form. - -`); - -const server = new WebSocket.Server({port: 5557}); -server.on('connection', ws => { - ws.binaryType = 'arraybuffer'; - ws.on('message', message => { - console.log(message); - - ws.send(new Uint8Array([4, 5, 6, 7]).buffer); - }); -}); diff --git a/vnext/src-win/IntegrationTests/websocket_integration_test_server_blob.js b/vnext/src-win/IntegrationTests/websocket_integration_test_server_blob.js deleted file mode 100644 index d08ae16e0c5..00000000000 --- a/vnext/src-win/IntegrationTests/websocket_integration_test_server_blob.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - */ - -'use strict'; - -/* eslint-env node */ - -const WebSocket = require('ws'); - -console.log(`\ -WebSocket binary integration test server - -This will send each incoming message back, in binary form. - -`); - -const server = new WebSocket.Server({port: 5557}); -server.on('connection', ws => { - ws.binaryType = 'blob'; - ws.on('message', message => { - console.log(message); - - ws.send([4, 5, 6, 7]); - }); -}); diff --git a/vnext/templates/cpp-app/windows/MyApp/MyApp.vcxproj b/vnext/templates/cpp-app/windows/MyApp/MyApp.vcxproj index f0a3399164c..01d9da533e0 100644 --- a/vnext/templates/cpp-app/windows/MyApp/MyApp.vcxproj +++ b/vnext/templates/cpp-app/windows/MyApp/MyApp.vcxproj @@ -50,7 +50,7 @@ Application Unicode - v143 + v145 true diff --git a/vnext/templates/cpp-lib/windows/MyLib/MyLib.vcxproj b/vnext/templates/cpp-lib/windows/MyLib/MyLib.vcxproj index 067a586aa81..4e96d2a9b2e 100644 --- a/vnext/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +++ b/vnext/templates/cpp-lib/windows/MyLib/MyLib.vcxproj @@ -49,7 +49,7 @@ DynamicLibrary Unicode - v143 + v145 false