diff --git a/.config/TSAOptions.json b/.config/TSAOptions.json
new file mode 100644
index 000000000..e6f1e8d35
--- /dev/null
+++ b/.config/TSAOptions.json
@@ -0,0 +1,10 @@
+{
+ "codebaseName": "calculator.app",
+ "notificationAliases": [
+ "eeappdevredfte@microsoft.com"
+ ],
+ "instanceUrl": "https://microsoft.visualstudio.com/DefaultCollection",
+ "projectName": "OS",
+ "areaPath": "OS\\Apps\\PAX\\Essential Experiences\\Apps\\Calculator",
+ "allTools": true
+}
diff --git a/.github/workflows/action-ci.yml b/.github/workflows/action-ci.yml
index e19f0ffd9..f1e1468fe 100644
--- a/.github/workflows/action-ci.yml
+++ b/.github/workflows/action-ci.yml
@@ -9,7 +9,7 @@ on:
jobs:
defineBuilds:
name: Define builds
- runs-on: windows-latest
+ runs-on: windows-2025-vs2026
env:
isPR: ${{ github.event_name == 'pull_request' }}
outputs:
@@ -51,7 +51,7 @@ jobs:
build:
needs: defineBuilds
name: Build
- runs-on: windows-latest
+ runs-on: windows-2025-vs2026
strategy:
matrix:
platform: ${{ fromJSON(needs.defineBuilds.outputs.platformList) }}
@@ -65,8 +65,6 @@ jobs:
name: Use nuget 6.x
with:
nuget-version: '6.x'
- - run: nuget restore ./src/Calculator.sln
- name: Restore nuget dependencies
- run: |
./build/scripts/UpdateAppxManifestVersion.ps1 `
-AppxManifest ./src/Calculator/Package.appxmanifest `
@@ -74,7 +72,10 @@ jobs:
shell: pwsh
name: Set version number in AppxManifest
- run: |
- msbuild ./src/Calculator.sln `
+ $env:CL = '/D_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS /wd9047'
+ msbuild ./src/Calculator.slnx `
+ -restore `
+ -p:RestorePackagesConfig=true `
-bl:${{ github.workspace }}/output/Calculator.binlog `
-p:OutDir=${{ github.workspace }}\output\ `
-p:Platform=${{ matrix.platform }} `
@@ -98,7 +99,7 @@ jobs:
unitTests:
needs: [defineBuilds, build]
- runs-on: windows-latest
+ runs-on: windows-2025-vs2026
name: Run unit tests
strategy:
matrix:
@@ -127,7 +128,7 @@ jobs:
uiTests:
needs: build
- runs-on: windows-latest
+ runs-on: windows-2025-vs2026
name: Run UI tests (x64)
env:
appDir: ${{ github.workspace }}/download/Calculator/AppPackages/Calculator*_Test
diff --git a/README.md b/README.md
index 4182e8225..1039438af 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@ Prerequisites:
git clone https://github.com/Microsoft/calculator.git
```
-- Open [src\Calculator.sln](/src/Calculator.sln) in Visual Studio to build and run the Calculator app.
+- Open [src\Calculator.slnx](/src/Calculator.slnx) in Visual Studio to build and run the Calculator app.
- For a general description of the Calculator project architecture see [ApplicationArchitecture.md](docs/ApplicationArchitecture.md).
- To run the UI Tests, you need to make sure that
[Windows Application Driver (WinAppDriver)](https://github.com/microsoft/WinAppDriver/releases/latest)
diff --git a/build/pipelines/azure-pipelines.ci-internal.yaml b/build/pipelines/azure-pipelines.ci-internal.yaml
index cf89be0c8..bbb76493c 100644
--- a/build/pipelines/azure-pipelines.ci-internal.yaml
+++ b/build/pipelines/azure-pipelines.ci-internal.yaml
@@ -12,27 +12,47 @@ pr: none
name: 0.$(Date:yyMM).$(DayOfMonth)$(Rev:rr).0
+variables:
+ # Docker image which is used to build the project https://aka.ms/obpipelines/containers
+ WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2025/vse2026:latest'
+
+ Codeql.Enabled: true
+
resources:
repositories:
- - repository: 1esPipelines
- type: git
- name: 1ESPipelineTemplates/1ESPipelineTemplates
- ref: refs/tags/release
+ - repository: templates
+ type: git
+ name: OneBranch.Pipelines/GovernedTemplates
+ ref: refs/heads/main
extends:
- template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines
+ template: v2/Microsoft.NonOfficial.yml@templates # https://aka.ms/obpipelines/templates
parameters:
- pool:
- name: EssentialExperiences-windows-2022
- image: MMSWindows2022-Secure
- os: windows
- sdl:
+ featureFlags:
+ EnableCDPxPAT: false
+ WindowsHostVersion:
+ Version: 2025
+
+ platform:
+ name: 'windows_undocked'
+
+ globalSdl:
+ isNativeCode: true
+ enableCheckCFlags: false
+ enableXFGCheck: false
+
+ tsa:
+ enabled: false
+
+ suppression:
+ suppressionFile: $(Build.SourcesDirectory)\.gdn\.gdnsuppress
+
policheck:
enabled: true
exclusionsFile: '$(Build.SourcesDirectory)\build\config\PoliCheckExclusions.xml'
stages:
- - stage:
+ - stage: Calculator
jobs:
- template: /build/pipelines/templates/build-single-architecture.yaml@self
parameters:
@@ -40,12 +60,6 @@ extends:
useReleaseAppxManifest: false
platform: x64
- - template: /build/pipelines/templates/build-single-architecture.yaml@self
- parameters:
- isReleaseBuild: true
- useReleaseAppxManifest: false
- platform: x86
-
- template: /build/pipelines/templates/build-single-architecture.yaml@self
parameters:
isReleaseBuild: true
@@ -57,17 +71,8 @@ extends:
platform: x64
runsettingsFileName: CalculatorUITests.ci-internal.runsettings
- - template: /build/pipelines/templates/run-ui-tests.yaml@self
- parameters:
- platform: x86
- runsettingsFileName: CalculatorUITests.ci-internal.runsettings
-
- template: /build/pipelines/templates/run-unit-tests.yaml@self
parameters:
platform: x64
- - template: /build/pipelines/templates/run-unit-tests.yaml@self
- parameters:
- platform: x86
-
- template: /build/pipelines/templates/package-msixbundle.yaml@self
diff --git a/build/pipelines/azure-pipelines.release.yaml b/build/pipelines/azure-pipelines.release.yaml
index f0cfd04c7..2994d5027 100644
--- a/build/pipelines/azure-pipelines.release.yaml
+++ b/build/pipelines/azure-pipelines.release.yaml
@@ -16,7 +16,11 @@ variables:
value: $[counter(format('{0}.{1}.*', variables['versionMajor'], variables['versionMinor']), 0)]
- name: versionPatch
value: 0
- - group: CalculatorTSAConfig
+ # Docker image which is used to build the project https://aka.ms/obpipelines/containers
+ - name: WindowsContainerImage
+ value: 'onebranch.azurecr.io/windows/ltsc2025/vse2026:latest'
+ - name: Codeql.Enabled
+ value: true
name: '$(versionMajor).$(versionMinor).$(versionBuild).$(versionPatch)'
@@ -33,35 +37,38 @@ parameters:
resources:
repositories:
- - repository: 1esPipelines
- type: git
- name: 1ESPipelineTemplates/1ESPipelineTemplates
- ref: refs/tags/release
+ - repository: templates
+ type: git
+ name: OneBranch.Pipelines/GovernedTemplates
+ ref: refs/heads/main
extends:
- template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines
+ template: v2/Microsoft.Official.yml@templates # https://aka.ms/obpipelines/templates
parameters:
- pool:
- name: EssentialExperiences-windows-2022
- image: MMSWindows2022-Secure
- os: windows
- sdl:
+ featureFlags:
+ EnableCDPxPAT: false
+ WindowsHostVersion:
+ Version: 2025
+
+ platform:
+ name: 'windows_undocked'
+
+ globalSdl:
+ isNativeCode: true
+ enableCheckCFlags: false
+ enableXFGCheck: false
+
tsa:
enabled: true
- config:
- codebaseName: $(TSA.CodebaseName)
- notificationAliases: $(TSA.NotificationAliases)
- instanceUrl: $(TSA.InstanceUrl)
- projectName: $(TSA.ProjectName)
- areaPath: $(TSA.AreaPath)
- serviceTreeID: $(TSA.ServiceTreeID)
- allTools: true
- codeql:
- tsaEnabled: true
+ configFile: '$(Build.SourcesDirectory)\.config\TSAOptions.json'
+
policheck:
enabled: true
exclusionsFile: '$(Build.SourcesDirectory)\build\config\PoliCheckExclusions.xml'
+ evidence:
+ enabled: false
+
stages:
- stage: Calculator
jobs:
@@ -76,7 +83,6 @@ extends:
platform: x86
isReleaseBuild: true
useReleaseAppxmanifest: true
- condition: not(eq(variables['Build.Reason'], 'PullRequest'))
- template: /build/pipelines/templates/build-single-architecture.yaml@self
parameters:
@@ -106,9 +112,10 @@ extends:
- template: /build/pipelines/templates/package-msixbundle.yaml@self
parameters:
signBundle: true
- createStoreBrokerPackages: true
+ includeX86: true
- - ${{ if eq(parameters.publishStore, true) }}:
- - template: /build/pipelines/templates/release-store.yaml@self
+ - template: /build/pipelines/templates/release-store.yaml@self
+ parameters:
+ publishToStore: ${{ parameters.publishStore }}
- ${{ if eq(parameters.publishVPack, true) }}:
- template: /build/pipelines/templates/release-vpack.yaml@self
diff --git a/build/pipelines/templates/build-single-architecture.yaml b/build/pipelines/templates/build-single-architecture.yaml
index 77626d752..037db209d 100644
--- a/build/pipelines/templates/build-single-architecture.yaml
+++ b/build/pipelines/templates/build-single-architecture.yaml
@@ -10,37 +10,39 @@ jobs:
- job: Build${{ parameters.platform }}
displayName: Build ${{ parameters.platform }}
condition: ${{ parameters.condition }}
+ pool:
+ type: windows
variables:
BuildConfiguration: Release
BuildPlatform: ${{ parameters.platform }}
+ StageOutputFolder: $(Build.BinariesDirectory)\$(BuildConfiguration)\${{ parameters.platform }}
${{ if eq(parameters.isReleaseBuild, true) }}:
${{ if eq(parameters.useReleaseAppxManifest, true) }}:
- ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:UseReleaseAppxManifest=true'
+ ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:UseReleaseAppxManifest=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)'
${{ if eq(parameters.useReleaseAppxManifest, false) }}:
- ExtraMSBuildArgs: '/p:IsStoreBuild=true'
+ ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)'
${{ if eq(parameters.isReleaseBuild, false) }}:
${{ if eq(parameters.useReleaseAppxManifest, true) }}:
- ExtraMSBuildArgs: '/p:UseReleaseAppxManifest=true'
+ ExtraMSBuildArgs: '/p:UseReleaseAppxManifest=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)'
${{ if eq(parameters.useReleaseAppxManifest, false) }}:
- ExtraMSBuildArgs: ''
+ ExtraMSBuildArgs: '/p:FeatureStagingBranchName=$(Build.SourceBranchName)'
${{ if eq(parameters.useReleaseAppxManifest, false) }}:
ManifestFileName: 'Package.appxmanifest'
${{ if eq(parameters.useReleaseAppxManifest, true) }}:
ManifestFileName: 'Package.Release.appxmanifest'
- templateContext:
- sdl:
- binskim:
- analyzeTargetGlob: +:f|$(Agent.BuildDirectory)\binskim\**\*
- outputs:
- - output: pipelineArtifact
- displayName: Publish drop artifact
- targetPath: $(Build.BinariesDirectory)\$(BuildConfiguration)\${{ parameters.platform }}
- artifactName: drop-${{ parameters.platform }}
- steps:
- - checkout: self
- fetchDepth: 1
+ # binaries scanning tools are run on this directory and
+ # this directory is uploaded to pipeline artifacts. More info at https://aka.ms/obpipelines/artifacts
+ ob_outputDirectory: $(StageOutputFolder)
+ ob_artifactBaseName: 'drop-${{ parameters.platform }}'
+ # Setting up SDL Tools
+ ob_sdl_prefast_enabled: true
+ ob_sdl_prefast_runDuring: 'Build'
+ ob_sdl_checkCompliantCompilerWarnings: true
+ # Scope BinSkim analysis to our built binaries, excluding third-party DLLs we don't produce PDBs for.
+ ob_sdl_binskim_target: '+:f|$(StageOutputFolder)\Calculator\**\*.dll;+:f|$(StageOutputFolder)\Calculator\**\*.exe;-:f|$(StageOutputFolder)\Calculator\**\clrcompression.dll;-:f|$(StageOutputFolder)\Calculator\**\WebView2Loader.dll;-:f|$(StageOutputFolder)\Calculator\**\Microsoft.Web.WebView2.Core.dll'
+ steps:
- ${{ if eq(parameters.isReleaseBuild, true) }}:
- task: UniversalPackages@0
displayName: Download internals package
@@ -49,7 +51,10 @@ jobs:
downloadDirectory: $(Build.SourcesDirectory)
vstsFeed: WindowsInboxApps
vstsFeedPackage: calculator-internals
- vstsPackageVersion: 0.0.122
+ vstsPackageVersion: 0.0.124
+
+ - task: NuGetAuthenticate@1
+ displayName: NuGet Authenticate
- task: NuGetToolInstaller@1
displayName: Use NuGet 6.x
@@ -57,10 +62,13 @@ jobs:
versionSpec: 6.x
- task: NuGetCommand@2
- displayName: NuGet restore src/Calculator.sln
+ displayName: Restore packages.config NuGet packages
inputs:
- command: custom
- arguments: restore src/Calculator.sln -Verbosity Detailed
+ command: restore
+ restoreSolution: 'src/**/*.vcxproj'
+ feedsToUse: config
+ nugetConfigPath: nuget.config
+ restoreDirectory: $(Build.SourcesDirectory)\src\packages
- task: PowerShell@2
displayName: Set version number in AppxManifest
@@ -69,47 +77,23 @@ jobs:
arguments: '-AppxManifest $(Build.SourcesDirectory)\src\Calculator\$(ManifestFileName) -Version $(Build.BuildNumber)'
- task: VSBuild@1
- displayName: 'Build solution src/Calculator.sln'
+ displayName: 'Build solution src/Calculator.slnx'
inputs:
- solution: src/Calculator.sln
- vsVersion: 17.0
- msbuildArgs: /bl:$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\Calculator.binlog /p:OutDir=$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\ /p:GenerateProjectSpecificOutputFolder=true /p:Version=$(Build.BuildNumber) /t:Publish /p:PublishDir=$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\publish\ $(ExtraMSBuildArgs)
+ solution: src/Calculator.slnx
+ vsVersion: 18.0
+ msbuildArgs: /restore /bl:$(StageOutputFolder)\Calculator.binlog /p:OutDir=$(StageOutputFolder)\ /p:GenerateProjectSpecificOutputFolder=true /p:Version=$(Build.BuildNumber) /t:Publish /p:PublishDir=$(StageOutputFolder)\publish\ $(ExtraMSBuildArgs)
platform: $(BuildPlatform)
configuration: $(BuildConfiguration)
maximumCpuCount: true
- ${{ if eq(parameters.isReleaseBuild, true) }}:
- - task: CopyFiles@2
- displayName: Copy Files for BinSkim analysis
- inputs:
- SourceFolder: '$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\Calculator\'
- # Setting up a folder to store all the binary files that we need BinSkim to scan.
- # If we put more things than we produce pdbs for and can index (such as nuget packages that ship without pdbs), binskim will fail.
- # Below are ignored files
- # - clrcompression.dll
- # - WebView2Loader.dll
- # - Microsoft.Web.WebView2.Core.dll
- Contents: |
- **\*.dll
- **\*.exe
- !**\clrcompression.dll
- !**\WebView2Loader.dll
- !**\Microsoft.Web.WebView2.Core.dll
- TargetFolder: '$(Agent.BuildDirectory)\binskim'
- CleanTargetFolder: true
- OverWrite: true
- flattenFolders: false
- analyzeTarget: '$(Agent.BuildDirectory)\binskim\*'
-
- task: PublishSymbols@2
displayName: Publish symbols
inputs:
- symbolsFolder: $(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)
- searchPattern: '**/*.pdb'
+ symbolsFolder: $(StageOutputFolder)
+ searchPattern: | # index executables to avoid degraded debugging experience - Package ES
+ **/*.pdb
+ **/*.exe
+ **/*.dll
symbolServerType: teamServices
treatNotIndexedAsWarning: true
-
- - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@1
- displayName: Run PoliCheck
- inputs:
- targetType: F
diff --git a/build/pipelines/templates/package-msixbundle.yaml b/build/pipelines/templates/package-msixbundle.yaml
index 102cf6799..66857b0a3 100644
--- a/build/pipelines/templates/package-msixbundle.yaml
+++ b/build/pipelines/templates/package-msixbundle.yaml
@@ -1,61 +1,53 @@
# This template contains a job which takes .msix packages which were built separately for each
-# architecture (arm64, x86, etc.) and combines them into a single .msixbundle. In release builds,
-# this job also signs the bundle and creates StoreBroker packages.
+# architecture (arm64, x64, etc.) and combines them into a single .msixbundle. In release builds,
+# this job also signs the bundle. StoreBroker payload creation and submission live in
+# release-store.yaml so the payload never needs to cross a job boundary.
parameters:
signBundle: false
- createStoreBrokerPackages: false
+ includeX86: false
+ makeAppx: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\MakeAppx.exe
jobs:
- job: Package
dependsOn:
- Buildx64
- - Buildx86
- BuildARM64
- condition: |
- and
- (
- in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
- in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
- in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
- )
+ - ${{ if eq(parameters.includeX86, true) }}:
+ - Buildx86
+ ${{ if eq(parameters.includeX86, true) }}:
+ condition: |
+ and
+ (
+ in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
+ in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
+ in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
+ )
+ ${{ else }}:
+ condition: |
+ and
+ (
+ in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
+ in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
+ )
+ pool:
+ type: windows
variables:
skipComponentGovernanceDetection: true
- StoreBrokerMediaRootPath: $(TEMP)\SBMedia
- StoreBrokerPackagePath: $(Build.ArtifactStagingDirectory)\storeBrokerPayload
- PackageX86: $[in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues')]
PackageX64: $[in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues')]
PackageARM64: $[in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues')]
- templateContext:
- outputs:
- - ${{ if eq(parameters.signBundle, false) }}:
- - output: pipelineArtifact
- displayName: Publish MsixBundle artifact
- targetPath: $(Build.ArtifactStagingDirectory)\msixBundle
- artifactName: msixBundle
- - ${{ else }}:
- - output: pipelineArtifact
- displayName: Publish MsixBundleSigned artifact
- targetPath: $(Build.ArtifactStagingDirectory)\msixBundle
- artifactName: msixBundleSigned
- - ${{ if eq(parameters.createStoreBrokerPackages, true) }}:
- - output: pipelineArtifact
- displayName: Publish StoreBroker Payload artifact
- targetPath: $(StoreBrokerPackagePath)
- artifactName: storeBrokerPayload
+ ${{ if eq(parameters.includeX86, true) }}:
+ PackageX86: $[in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues')]
- steps:
- - checkout: self
- fetchDepth: 1
-
- - task: DownloadPipelineArtifact@2
- displayName: Download all .msix artifacts (x86)
- condition: and(succeeded(), eq(variables.PackageX86, 'true'))
- inputs:
- artifactName: drop-x86
- itemPattern: '**/*.msix'
- targetPath: $(Build.ArtifactStagingDirectory)\drop\x86
+ ob_outputDirectory: $(Build.ArtifactStagingDirectory)\msixBundle
+ ${{ if eq(parameters.signBundle, true) }}:
+ ob_artifactBaseName: msixBundleSigned
+ ${{ else }}:
+ ob_artifactBaseName: msixBundle
+ ob_sdl_binskim_enabled: false
+ ob_sdl_sbom_enabled: false
+ steps:
- task: DownloadPipelineArtifact@2
displayName: Download all .msix artifacts (x64)
condition: and(succeeded(), eq(variables.PackageX64, 'true'))
@@ -64,6 +56,15 @@ jobs:
itemPattern: '**/*.msix'
targetPath: $(Build.ArtifactStagingDirectory)\drop\x64
+ - ${{ if eq(parameters.includeX86, true) }}:
+ - task: DownloadPipelineArtifact@2
+ displayName: Download all .msix artifacts (x86)
+ condition: and(succeeded(), eq(variables.PackageX86, 'true'))
+ inputs:
+ artifactName: drop-x86
+ itemPattern: '**/*.msix'
+ targetPath: $(Build.ArtifactStagingDirectory)\drop\x86
+
- task: DownloadPipelineArtifact@2
displayName: Download all .msix artifacts (ARM64)
condition: and(succeeded(), eq(variables.PackageARM64, 'true'))
@@ -72,7 +73,7 @@ jobs:
itemPattern: '**/*.msix'
targetPath: $(Build.ArtifactStagingDirectory)\drop\ARM64
- - ${{ if or(eq(parameters.createStoreBrokerPackages, true), eq(parameters.signBundle, true)) }}:
+ - ${{ if eq(parameters.signBundle, true) }}:
- task: UniversalPackages@0
displayName: Download internals package
inputs:
@@ -80,7 +81,7 @@ jobs:
downloadDirectory: $(Build.SourcesDirectory)
vstsFeed: WindowsInboxApps
vstsFeedPackage: calculator-internals
- vstsPackageVersion: 0.0.122
+ vstsPackageVersion: 0.0.124
- task: PowerShell@2
displayName: Generate MsixBundle mapping
@@ -91,7 +92,7 @@ jobs:
- powershell: |
$buildVersion = [version]$Env:BUILDVERSION
$bundleVersion = "2021.$($buildVersion.Minor).$($buildVersion.Build).$($buildVersion.Revision)"
- & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\MakeAppx.exe" bundle /v /bv $bundleVersion /f $Env:MAPPINGFILEPATH /p $Env:OUTPUTPATH
+ & "${{ parameters.makeAppx }}" bundle /v /bv $bundleVersion /f $Env:MAPPINGFILEPATH /p $Env:OUTPUTPATH
displayName: Make MsixBundle
env:
BUILDVERSION: $(Build.BuildNumber)
@@ -159,35 +160,3 @@ jobs:
}
]
- - ${{ if eq(parameters.createStoreBrokerPackages, true) }}:
- - powershell: |
- # Just modify this line to indicate where your en-us PDP file is. Leave the other lines alone.
- $enUSPdpFilePath = "$(Build.SourcesDirectory)\PDP\en-US\PDP.xml"
-
- # This is going to save the release value from the PDP file to $(SBMediaReleaseVersion)
- # which you can then refer to in the UniversalPackages task.
- $release = ([xml](Get-Content $enUSPdpFilePath)).ProductDescription.Release.Trim()
- Write-Host "##vso[task.setvariable variable=SBMediaReleaseVersion;]$release"
- displayName: Determine the PDP Media release version from the en-us PDP file
-
- - task: UniversalPackages@0
- displayName: Download PDP media (screenshots, trailers) universal package
- inputs:
- command: download
- downloadDirectory: $(StoreBrokerMediaRootPath)/$(SBMediaReleaseVersion)
- vstsFeed: WindowsInboxApps
- vstsFeedPackage: calculator-pdp-media
- vstsPackageVersion: $(SBMediaReleaseVersion)
-
- - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3
- displayName: Create StoreBroker Payload
- inputs:
- serviceEndpoint: Calculator StoreBroker FC
- sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json
- sourceFolder: $(Build.ArtifactStagingDirectory)/msixBundle
- contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.msixbundle
- pdpPath: $(Build.SourcesDirectory)\PDP
- pdpInclude: PDP.xml
- pdpMediaPath: $(StoreBrokerMediaRootPath)
- outSBPackagePath: $(StoreBrokerPackagePath)
- outSBName: SBCalculator
diff --git a/build/pipelines/templates/release-store.yaml b/build/pipelines/templates/release-store.yaml
index f47152d05..6145e55e1 100644
--- a/build/pipelines/templates/release-store.yaml
+++ b/build/pipelines/templates/release-store.yaml
@@ -1,44 +1,107 @@
# This template contains jobs to release the app to the Store.
+# The signed msixbundle from the Package job is downloaded here, the StoreBroker
+# payload is created (and published as an artifact for inspection), and then
+# optionally flighted to the Store. Flight + Aero are gated by publishToStore so
+# the pipeline can be queued with the "Publish and flight" checkbox unchecked
+# to validate payload creation without actually shipping to the Store.
+
+parameters:
+ publishToStore: true
jobs:
- job: ReleaseStore
dependsOn: Package
- templateContext:
- type: releaseJob
- isProduction: true
- inputs:
- - input: pipelineArtifact
- artifactName: storeBrokerPayload
+ pool:
+ type: windows
variables:
FlightId: 161f0975-cb5f-475b-8ef6-26383c37621f
AppId: 9WZDNCRFHVN5
ProductId: 00009007199266248474
+ StoreBrokerMediaRootPath: $(Pipeline.Workspace)\SBMedia
+ StoreBrokerPackagePath: $(Build.ArtifactStagingDirectory)\storeBrokerPayload
+
+ ob_git_checkout: true
+ ob_outputDirectory: $(Build.ArtifactStagingDirectory)\storeBrokerPayload
+ ob_artifactBaseName: storeBrokerPayload
+ ob_sdl_binskim_enabled: false
+ ob_sdl_policheck_enabled: false
+ ob_sdl_eslint_enabled: false
+ ob_sdl_antimalwareScan_enabled: false
+ ob_sdl_credscan_enabled: false
+ ob_sdl_sbom_enabled: false
+
steps:
- - checkout: none
+ - task: DownloadPipelineArtifact@2
+ displayName: Download signed msixbundle
+ inputs:
+ artifactName: msixBundleSigned
+ targetPath: $(Build.ArtifactStagingDirectory)\msixBundle
- - task: MS-RDX-MRO.windows-store-publish.flight-task.store-flight@3
- displayName: Flight StoreBroker Payload to team ring
- name: StoreBrokerFlight
+ - task: UniversalPackages@0
+ displayName: Download internals package
inputs:
- serviceEndpoint: Calculator StoreBroker FC
- appId: $(AppId)
- flightId: $(FlightId)
- inputMethod: JsonAndZip
- jsonPath: $(Pipeline.Workspace)\SBCalculator.json
- zipPath: $(Pipeline.Workspace)\SBCalculator.zip
- force: true
- skipPolling: true
- targetPublishMode: Immediate
- logPath: $(Pipeline.Workspace)\StoreBroker.log
- deletePackages: true
- numberOfPackagesToKeep: 0
-
- - task: APS-Aero-Package.aero-upload-task.AeroUploadTask.AeroUpload@2
- displayName: Aero Upload (FC)
+ command: download
+ downloadDirectory: $(Build.SourcesDirectory)
+ vstsFeed: WindowsInboxApps
+ vstsFeedPackage: calculator-internals
+ vstsPackageVersion: 0.0.124
+
+ - powershell: |
+ # Just modify this line to indicate where your en-us PDP file is. Leave the other lines alone.
+ $enUSPdpFilePath = "$(Build.SourcesDirectory)\PDP\en-US\PDP.xml"
+
+ # This is going to save the release value from the PDP file to $(SBMediaReleaseVersion)
+ # which you can then refer to in the UniversalPackages task.
+ $release = ([xml](Get-Content $enUSPdpFilePath)).ProductDescription.Release.Trim()
+ Write-Host "##vso[task.setvariable variable=SBMediaReleaseVersion;]$release"
+ displayName: Determine the PDP Media release version from the en-us PDP file
+
+ - task: UniversalPackages@0
+ displayName: Download PDP media (screenshots, trailers) universal package
+ inputs:
+ command: download
+ downloadDirectory: $(StoreBrokerMediaRootPath)/$(SBMediaReleaseVersion)
+ vstsFeed: WindowsInboxApps
+ vstsFeedPackage: calculator-pdp-media
+ vstsPackageVersion: $(SBMediaReleaseVersion)
+
+ - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3
+ displayName: Create StoreBroker Payload
inputs:
- productId: $(ProductId)
- flightId: $(FlightId)
- submissionId: $(StoreBrokerFlight.WS_SubmissionId)
- submissionDataPath: $(Pipeline.Workspace)\SBCalculator.json
- packagePath: $(Pipeline.Workspace)\SBCalculator.zip
- serviceEndpoint: AeroUpload-Calculator-FC
+ serviceEndpoint: Calculator StoreBroker FC
+ sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json
+ sourceFolder: $(Build.ArtifactStagingDirectory)\msixBundle
+ contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.msixbundle
+ pdpPath: $(Build.SourcesDirectory)\PDP
+ pdpInclude: PDP.xml
+ pdpMediaPath: $(StoreBrokerMediaRootPath)
+ outSBPackagePath: $(StoreBrokerPackagePath)
+ outSBName: SBCalculator
+
+ - ${{ if eq(parameters.publishToStore, true) }}:
+ - task: MS-RDX-MRO.windows-store-publish.flight-task.store-flight@3
+ displayName: Flight StoreBroker Payload to team ring
+ name: StoreBrokerFlight
+ inputs:
+ serviceEndpoint: Calculator StoreBroker FC
+ appId: $(AppId)
+ flightId: $(FlightId)
+ inputMethod: JsonAndZip
+ jsonPath: $(StoreBrokerPackagePath)\SBCalculator.json
+ zipPath: $(StoreBrokerPackagePath)\SBCalculator.zip
+ force: true
+ skipPolling: true
+ targetPublishMode: Immediate
+ logPath: $(StoreBrokerPackagePath)\StoreBroker.log
+ deletePackages: true
+ numberOfPackagesToKeep: 0
+
+ - task: APS-Aero-Package.aero-upload-task.AeroUploadTask.AeroUpload@2
+ displayName: Aero Upload (FC)
+ inputs:
+ productId: $(ProductId)
+ flightId: $(FlightId)
+ submissionId: $(StoreBrokerFlight.WS_SubmissionId)
+ submissionDataPath: $(StoreBrokerPackagePath)\SBCalculator.json
+ packagePath: $(StoreBrokerPackagePath)\SBCalculator.zip
+ serviceEndpoint: AeroUpload-Calculator-FC
diff --git a/build/pipelines/templates/release-vpack.yaml b/build/pipelines/templates/release-vpack.yaml
index b04525b8c..c97dabcbf 100644
--- a/build/pipelines/templates/release-vpack.yaml
+++ b/build/pipelines/templates/release-vpack.yaml
@@ -4,8 +4,19 @@
jobs:
- job: ReleaseVPack
dependsOn: Package
+ pool:
+ type: windows
variables:
skipComponentGovernanceDetection: true
+
+ ob_git_checkout: true
+ ob_outputDirectory: $(Build.ArtifactStagingDirectory)\releaseVPack
+ ob_sdl_binskim_enabled: false
+ ob_sdl_policheck_enabled: false
+ ob_sdl_eslint_enabled: false
+ ob_sdl_antimalwareScan_enabled: false
+ ob_sdl_credscan_enabled: false
+ ob_sdl_sbom_enabled: false
templateContext:
outputs:
- output: pipelineArtifact
@@ -15,11 +26,11 @@ jobs:
sbomEnabled: false
steps:
- - checkout: none
-
- - download: current
- displayName: Download msixBundleSigned artifact
- artifact: msixBundleSigned
+ - task: DownloadPipelineArtifact@2
+ displayName: Download signed msixBundle
+ inputs:
+ artifactName: msixBundleSigned
+ targetPath: $(Pipeline.Workspace)\msixBundleSigned
- task: CopyFiles@2
displayName: Copy signed MsixBundle to vpack staging folder
@@ -44,7 +55,7 @@ jobs:
downloadDirectory: $(Build.SourcesDirectory)
vstsFeed: WindowsInboxApps
vstsFeedPackage: calculator-internals
- vstsPackageVersion: 0.0.122
+ vstsPackageVersion: 0.0.124
- pwsh: |
$configPath = "$(Build.SourcesDirectory)\Tools\Build\Signing\ESRP-auth.json"
diff --git a/build/pipelines/templates/run-ui-tests.yaml b/build/pipelines/templates/run-ui-tests.yaml
index 8801a9fbd..bb5b997c1 100644
--- a/build/pipelines/templates/run-ui-tests.yaml
+++ b/build/pipelines/templates/run-ui-tests.yaml
@@ -9,13 +9,26 @@ jobs:
displayName: UITests ${{ parameters.platform }}
dependsOn: Build${{ parameters.platform }}
condition: succeeded()
+ pool:
+ type: windows
+ isCustom: true
+ name: EssentialExperiences-Win11
+ image: Win11Enterprise-BuildTools2022
variables:
skipComponentGovernanceDetection: true
DropName: drop-${{ parameters.platform }}
+ # Test results are just log files, not release binaries — skip SDL scanning
+ ob_outputDirectory: '$(Common.TestResultsDirectory)'
+ ob_artifactBaseName: 'drop-ui-tests-${{ parameters.platform }}-Attempt$(System.JobAttempt)'
+ ob_sdl_binskim_enabled: false
+ ob_sdl_sbom_enabled: false
steps:
- - checkout: self
- fetchDepth: 1
+ - task: UseDotNet@2
+ displayName: Install .NET 10 SDK
+ inputs:
+ packageType: 'sdk'
+ version: '10.x'
- task: PowerShell@2
displayName: Turn off animation effects
@@ -29,12 +42,14 @@ jobs:
width: 1920
height: 1080
- - download: current
+ - task: DownloadPipelineArtifact@2
displayName: Download MsixBundle and CalculatorUITests
- artifact: $(DropName)
- patterns: |
- Calculator/AppPackages/**
- publish/**
+ inputs:
+ artifactName: $(DropName)
+ itemPattern: |
+ Calculator/AppPackages/**
+ publish/**
+ targetPath: $(Pipeline.Workspace)\$(DropName)
- powershell: |
$(Build.SourcesDirectory)/build/scripts/SignTestApp.ps1 -AppToSign '$(Pipeline.Workspace)/$(DropName)/Calculator/AppPackages/Calculator_*_Test/Calculator_*.msixbundle'
diff --git a/build/pipelines/templates/run-unit-tests.yaml b/build/pipelines/templates/run-unit-tests.yaml
index 84e76ec26..d31cc9349 100644
--- a/build/pipelines/templates/run-unit-tests.yaml
+++ b/build/pipelines/templates/run-unit-tests.yaml
@@ -9,17 +9,32 @@ jobs:
displayName: UnitTests ${{ parameters.platform }}
dependsOn: Build${{ parameters.platform }}
condition: succeeded()
+ pool:
+ type: windows
+ isCustom: true
+ name: EssentialExperiences-windows-2022
variables:
skipComponentGovernanceDetection: true
UnitTestsDir: $(Pipeline.Workspace)\drop-${{ parameters.platform }}\CalculatorUnitTests\AppPackages\CalculatorUnitTests_Test
+ # Test results are just log files, not release binaries — skip SDL scanning
+ ob_outputDirectory: '$(Common.TestResultsDirectory)'
+ ob_artifactBaseName: 'drop-unit-tests-${{ parameters.platform }}-Attempt$(System.JobAttempt)'
+ ob_sdl_binskim_enabled: false
+ ob_sdl_sbom_enabled: false
+
steps:
- - checkout: self
- fetchDepth: 1
-
- - download: current
+ - task: UseDotNet@2
+ displayName: Install .NET 10 SDK
+ inputs:
+ packageType: 'sdk'
+ version: '10.x'
+
+ - task: DownloadPipelineArtifact@2
displayName: Download CalculatorUnitTests
- artifact: drop-${{ parameters.platform }}
- patterns: '**/CalculatorUnitTests_Test/**'
+ inputs:
+ artifactName: drop-${{ parameters.platform }}
+ itemPattern: '**/CalculatorUnitTests_Test/**'
+ targetPath: $(Pipeline.Workspace)\drop-${{ parameters.platform }}
- powershell: |
$(Build.SourcesDirectory)/build/scripts/SignTestApp.ps1 -AppToSign '$(UnitTestsDir)\CalculatorUnitTests.msix'
diff --git a/src/CalcManager/CalcManager.vcxproj b/src/CalcManager/CalcManager.vcxproj
index ab8c22625..283154fcb 100644
--- a/src/CalcManager/CalcManager.vcxproj
+++ b/src/CalcManager/CalcManager.vcxproj
@@ -33,7 +33,7 @@
CalcManager
false
en-US
- 15.0
+ 18.0
true
Windows Store
10.0
@@ -48,23 +48,23 @@
StaticLibrary
true
- v143
+ v145
StaticLibrary
true
- v143
+ v145
StaticLibrary
true
- v143
+ v145
StaticLibrary
false
true
- v143
+ v145
NativeRecommendedRules.ruleset
true
@@ -72,7 +72,7 @@
StaticLibrary
false
true
- v143
+ v145
NativeRecommendedRules.ruleset
true
@@ -80,7 +80,7 @@
StaticLibrary
false
true
- v143
+ v145
NativeRecommendedRules.ruleset
true
diff --git a/src/CalcViewModel/CalcViewModel.vcxproj b/src/CalcViewModel/CalcViewModel.vcxproj
index d94505a08..1df213e66 100644
--- a/src/CalcViewModel/CalcViewModel.vcxproj
+++ b/src/CalcViewModel/CalcViewModel.vcxproj
@@ -42,35 +42,35 @@
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
diff --git a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj
index 961d2cae8..210c03af3 100644
--- a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj
+++ b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj
@@ -42,35 +42,35 @@
StaticLibrary
true
- v143
+ v145
StaticLibrary
true
- v143
+ v145
StaticLibrary
true
- v143
+ v145
StaticLibrary
false
true
- v143
+ v145
StaticLibrary
false
true
- v143
+ v145
StaticLibrary
false
true
- v143
+ v145
diff --git a/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj b/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj
index bead07e33..1e1a04c7e 100644
--- a/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj
+++ b/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj
@@ -13,9 +13,10 @@
UAP
10.0.26100.0
10.0.17763.0
- 14
+ 18
512
{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 9.0
AnyCPU
diff --git a/src/Calculator.sln b/src/Calculator.sln
deleted file mode 100644
index dc3f48fa9..000000000
--- a/src/Calculator.sln
+++ /dev/null
@@ -1,189 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.0.0
-MinimumVisualStudioVersion = 17.0.0.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A5DF651-B8A1-45CA-9135-964A6FC7F5D1}"
- ProjectSection(SolutionItems) = preProject
- ..\.clang-format = ..\.clang-format
- nuget.config = nuget.config
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calculator", "Calculator\Calculator.csproj", "{3B773403-B0D6-4F9A-948E-512A7A5FB315}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcManager", "CalcManager\CalcManager.vcxproj", "{311E866D-8B93-4609-A691-265941FEE101}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcViewModel", "CalcViewModel\CalcViewModel.vcxproj", "{812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalculatorUnitTests", "CalculatorUnitTests\CalculatorUnitTests.vcxproj", "{D3BAED2C-4B07-4E1D-8807-9D6499450349}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CalculatorUITests", "CalculatorUITests\CalculatorUITests.csproj", "{B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CalculatorUITestFramework", "CalculatorUITestFramework\CalculatorUITestFramework.csproj", "{96454213-94AF-457D-9DF9-B14F80E7770F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GraphingImpl", "GraphingImpl\GraphingImpl.vcxproj", "{52E03A58-B378-4F50-8BFB-F659FB85E790}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GraphControl", "GraphControl\GraphControl.vcxproj", "{E727A92B-F149-492C-8117-C039A298719B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TraceLogging", "TraceLogging\TraceLogging.vcxproj", "{FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcViewModelCopyForUT", "CalcViewModelCopyForUT\CalcViewModelCopyForUT.vcxproj", "{CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calculator.ManagedViewModels", "Calculator.ManagedViewModels\Calculator.ManagedViewModels.csproj", "{2179CFDE-CDED-4DF0-8C24-A0EF6B425771}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|ARM64 = Debug|ARM64
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|ARM64 = Release|ARM64
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.Build.0 = Debug|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.Deploy.0 = Debug|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.ActiveCfg = Debug|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.Build.0 = Debug|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.Deploy.0 = Debug|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.ActiveCfg = Debug|x86
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.Build.0 = Debug|x86
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.Deploy.0 = Debug|x86
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.ActiveCfg = Release|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.Build.0 = Release|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.Deploy.0 = Release|ARM64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.ActiveCfg = Release|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.Build.0 = Release|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.Deploy.0 = Release|x64
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.ActiveCfg = Release|x86
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.Build.0 = Release|x86
- {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.Deploy.0 = Release|x86
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|ARM64.Build.0 = Debug|ARM64
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|x64.ActiveCfg = Debug|x64
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|x64.Build.0 = Debug|x64
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|x86.ActiveCfg = Debug|Win32
- {311E866D-8B93-4609-A691-265941FEE101}.Debug|x86.Build.0 = Debug|Win32
- {311E866D-8B93-4609-A691-265941FEE101}.Release|ARM64.ActiveCfg = Release|ARM64
- {311E866D-8B93-4609-A691-265941FEE101}.Release|ARM64.Build.0 = Release|ARM64
- {311E866D-8B93-4609-A691-265941FEE101}.Release|x64.ActiveCfg = Release|x64
- {311E866D-8B93-4609-A691-265941FEE101}.Release|x64.Build.0 = Release|x64
- {311E866D-8B93-4609-A691-265941FEE101}.Release|x86.ActiveCfg = Release|Win32
- {311E866D-8B93-4609-A691-265941FEE101}.Release|x86.Build.0 = Release|Win32
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|ARM64.Build.0 = Debug|ARM64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x64.ActiveCfg = Debug|x64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x64.Build.0 = Debug|x64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x86.ActiveCfg = Debug|Win32
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x86.Build.0 = Debug|Win32
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|ARM64.ActiveCfg = Release|ARM64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|ARM64.Build.0 = Release|ARM64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x64.ActiveCfg = Release|x64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x64.Build.0 = Release|x64
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x86.ActiveCfg = Release|Win32
- {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x86.Build.0 = Release|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.ActiveCfg = Debug|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.Build.0 = Debug|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.Deploy.0 = Debug|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.ActiveCfg = Debug|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.Build.0 = Debug|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.Deploy.0 = Debug|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|ARM64.ActiveCfg = Release|ARM64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.ActiveCfg = Release|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.Build.0 = Release|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.Deploy.0 = Release|x64
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.ActiveCfg = Release|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.Build.0 = Release|Win32
- {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.Deploy.0 = Release|Win32
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|ARM64.Build.0 = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x64.Build.0 = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x86.Build.0 = Debug|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|ARM64.ActiveCfg = Release|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|ARM64.Build.0 = Release|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x64.ActiveCfg = Release|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x64.Build.0 = Release|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x86.ActiveCfg = Release|Any CPU
- {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x86.Build.0 = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|ARM64.Build.0 = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x64.Build.0 = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x86.Build.0 = Debug|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|ARM64.ActiveCfg = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|ARM64.Build.0 = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x64.ActiveCfg = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x64.Build.0 = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x86.ActiveCfg = Release|Any CPU
- {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x86.Build.0 = Release|Any CPU
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|ARM64.Build.0 = Debug|ARM64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x64.ActiveCfg = Debug|x64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x64.Build.0 = Debug|x64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x86.ActiveCfg = Debug|Win32
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x86.Build.0 = Debug|Win32
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|ARM64.ActiveCfg = Release|ARM64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|ARM64.Build.0 = Release|ARM64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x64.ActiveCfg = Release|x64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x64.Build.0 = Release|x64
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x86.ActiveCfg = Release|Win32
- {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x86.Build.0 = Release|Win32
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|ARM64.Build.0 = Debug|ARM64
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|x64.ActiveCfg = Debug|x64
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|x64.Build.0 = Debug|x64
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|x86.ActiveCfg = Debug|Win32
- {E727A92B-F149-492C-8117-C039A298719B}.Debug|x86.Build.0 = Debug|Win32
- {E727A92B-F149-492C-8117-C039A298719B}.Release|ARM64.ActiveCfg = Release|ARM64
- {E727A92B-F149-492C-8117-C039A298719B}.Release|ARM64.Build.0 = Release|ARM64
- {E727A92B-F149-492C-8117-C039A298719B}.Release|x64.ActiveCfg = Release|x64
- {E727A92B-F149-492C-8117-C039A298719B}.Release|x64.Build.0 = Release|x64
- {E727A92B-F149-492C-8117-C039A298719B}.Release|x86.ActiveCfg = Release|Win32
- {E727A92B-F149-492C-8117-C039A298719B}.Release|x86.Build.0 = Release|Win32
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|ARM64.Build.0 = Debug|ARM64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x64.ActiveCfg = Debug|x64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x64.Build.0 = Debug|x64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x86.ActiveCfg = Debug|Win32
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x86.Build.0 = Debug|Win32
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|ARM64.ActiveCfg = Release|ARM64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|ARM64.Build.0 = Release|ARM64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x64.ActiveCfg = Release|x64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x64.Build.0 = Release|x64
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x86.ActiveCfg = Release|Win32
- {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x86.Build.0 = Release|Win32
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x64.ActiveCfg = Debug|x64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x64.Build.0 = Debug|x64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x86.ActiveCfg = Debug|Win32
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x86.Build.0 = Debug|Win32
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|ARM64.ActiveCfg = Release|ARM64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x64.ActiveCfg = Release|x64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x64.Build.0 = Release|x64
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x86.ActiveCfg = Release|Win32
- {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x86.Build.0 = Release|Win32
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|ARM64.Build.0 = Debug|ARM64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x64.ActiveCfg = Debug|x64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x64.Build.0 = Debug|x64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x86.ActiveCfg = Debug|x86
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x86.Build.0 = Debug|x86
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|ARM64.ActiveCfg = Release|ARM64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|ARM64.Build.0 = Release|ARM64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x64.ActiveCfg = Release|x64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x64.Build.0 = Release|x64
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x86.ActiveCfg = Release|x86
- {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {0EA53F83-5FA6-46A1-A290-A3C6962D2CAC}
- EndGlobalSection
-EndGlobal
diff --git a/src/Calculator.slnx b/src/Calculator.slnx
new file mode 100644
index 000000000..b8fdba1de
--- /dev/null
+++ b/src/Calculator.slnx
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Calculator/Calculator.csproj b/src/Calculator/Calculator.csproj
index 4cdb87940..1ae72e081 100644
--- a/src/Calculator/Calculator.csproj
+++ b/src/Calculator/Calculator.csproj
@@ -18,7 +18,7 @@
false
false
- 14
+ 18
10.0
black
512
@@ -35,6 +35,7 @@
$(Platform)
0
/disableStackTraceMetadata /disableExceptionMessages
+ 9.0
diff --git a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj
index 1614df729..5b737712c 100644
--- a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj
+++ b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj
@@ -1,6 +1,6 @@
- net8.0
+ net10.0
AnyCPU
diff --git a/src/CalculatorUITests/CalculatorUITests.csproj b/src/CalculatorUITests/CalculatorUITests.csproj
index fcb245ea2..ab10816ec 100644
--- a/src/CalculatorUITests/CalculatorUITests.csproj
+++ b/src/CalculatorUITests/CalculatorUITests.csproj
@@ -1,6 +1,6 @@
- net8.0
+ net10.0
false
AnyCPU
diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj
index 2449b7624..cda490251 100644
--- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj
+++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj
@@ -4,7 +4,7 @@
{d3baed2c-4b07-4e1d-8807-9d6499450349}
CalculatorUnitTests
en-US
- 15.0
+ 18.0
true
Windows Store
10.0.26100.0
@@ -47,38 +47,38 @@
Application
true
- v143
+ v145
Application
true
- v143
+ v145
true
Application
true
- v143
+ v145
Application
false
true
- v143
+ v145
true
Application
false
true
- v143
+ v145
true
Application
false
true
- v143
+ v145
true
diff --git a/src/GraphControl/Control/Grapher.cpp b/src/GraphControl/Control/Grapher.cpp
index 20c16fad2..9ba431113 100644
--- a/src/GraphControl/Control/Grapher.cpp
+++ b/src/GraphControl/Control/Grapher.cpp
@@ -373,7 +373,8 @@ namespace GraphControl
request += s_getGraphClosingTags;
}
- if (graphExpression = m_solver->ParseInput(request, m_errorCode, m_errorType))
+ graphExpression = m_solver->ParseInput(request, m_errorCode, m_errorType);
+ if (graphExpression)
{
initResult = TryInitializeGraph(keepCurrentView, graphExpression.get());
diff --git a/src/GraphControl/GraphControl.vcxproj b/src/GraphControl/GraphControl.vcxproj
index f00b2c652..f878b51dd 100644
--- a/src/GraphControl/GraphControl.vcxproj
+++ b/src/GraphControl/GraphControl.vcxproj
@@ -42,35 +42,35 @@
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
diff --git a/src/GraphingImpl/GraphingImpl.vcxproj b/src/GraphingImpl/GraphingImpl.vcxproj
index 75a729257..38f1865a2 100644
--- a/src/GraphingImpl/GraphingImpl.vcxproj
+++ b/src/GraphingImpl/GraphingImpl.vcxproj
@@ -42,35 +42,35 @@
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
diff --git a/src/TraceLogging/TraceLogging.vcxproj b/src/TraceLogging/TraceLogging.vcxproj
index 7fe46575b..dab89a73c 100644
--- a/src/TraceLogging/TraceLogging.vcxproj
+++ b/src/TraceLogging/TraceLogging.vcxproj
@@ -42,35 +42,35 @@
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145
DynamicLibrary
false
true
- v143
+ v145