Repository: microsoft/terminal (language: cpp)

Issue:
confusing, conflicting version indication
I'm finding the version indication confusing. My use case is simple:

1. I want to see what version.
2. I have and compare that to the version currently released.
3. I want to check the changelog to see what has changed and see if I want to upgrade.

That seems to be a reasonable sequence of events for any software for a power user. But with Windows Terminal, this is what happens:

1. I look to see what file I installed Windows Terminal with. It looks like it was `Microsoft.WindowsTerminal_Win10_1.14.1962.0_8wekyb3d8bbwe.msixbundle`, because that's the last installer I have saved.
2. But going to `About` in Windows Terminal shows v1.15.2712.0. Did it auto-update at some point? Maybe; I don't remember. But no problem, I can just check the changelog, right?
3. I go to the [releases page](https://github.com/microsoft/terminal/releases) and search for `1.15.2712.0`. It isn't found.
4. In addition, the latest v1.15 release is [v1.15.252](https://github.com/microsoft/terminal/releases/tag/v1.15.2524.0)! In most version schemes I'm used to, "2712" is eons greater than "252". How did I get something much more recent?
5. I see that v1.15.252 is tagged with `v1.15.2524.0`. Oh, so maybe they are chopping off digits in the official version number? Is GitHub doing this?
6. Regardless of what is making the tags and version number and labels inconsistent, where is the changelog entry for 1.15.2712.0, and why is it so much later than what is shown as the latest on GitHub?

I'm a little confused here.


Discussion / hints:
Similar issue. Application stopped launching today so I installed the latest release version and received the following: 

_"Windows cannot install package Microsoft.WindowsTerminal_1.15.2524.0_x64__8wekyb3d8bbwe because it has version 1.15.2524.0. A higher version 1.15.2712.0 of this package is already installed."_

I do not have the exact version that was originally installed, but it was installed in Nov 2021, so needless to say it wasn't 2524 or 2712. Was an update pushed too early? Also confused....
Thanks for bringing this up! It's definitely an issue, but more one of poor communication than anything else.

Every build of Terminal that we publish to the store is actually two packages, targeting different versions of Windows. For various reasons, those packages cannot have the same version number; they are, however, built from the same code. For various _other_ reasons, the final version component must be `0`.

Because of that, building Terminal will produce two packages versioned `1.0.101.0` and `1.0.102.0`. You're right about the chopping: those two packages are considered part of the `1.0.10` release cycle (stripping the final digit that indicates which one built first).

I've therefore been releasing them both under the "1.0.10" banner, but I've been tagging the release to match the first-produced package (in this case, `v1.0.101.0`)

The feedback here indicates that I should change:
- Tag the commit with the "pretty" release cycle version (`v1.0.10`)
- In the About dialog, strip off the `1.0` or `2.0` (or really, the ones place from the revision and the vestigial `.0`)

The last bit is that I did not publish the changelog for the 1.15.271 release cycle. Sorry about that. ☹️ 
> …  two packages versioned `1.0.101.0` and `1.0.102.0`. You're right about the chopping: those two packages are considered part of the `1.0.10` release cycle …

This is completely nonstandard and in conflict with [Semantic Versioning](https://semver.org/) comparison rules. It will break any automated admin tools that makes decisions about upgrading, not to mention causing humans the type of confusion that happened here. Pretending that `101` is really `10` is wrong on so many levels. The reasons versions have dots to begin with is to serve as delimiters so that we don't have to guess where an arbitrary convention is dividing the version number.

Please consider changing to a conventional approach. Semantic versioning has "metadata" for exactly this kind of situation. If Windows can't handle semantic versioning, well, that's another story. But arbitrarily placing invisible delimiters within the version string is not a good workaround.
> The feedback here indicates that I should change:

Sorry if I jumped the gun and commented before I saw the rest of your reply.

As for what you should do, above all you should be following [Semantic Versioning](https://semver.org/). This would mean:
* If you want to use `100` and `101` somewhere to mean `10` "under the covers" so to speak, fine, as long as the "never see the light of day". There should only be one version number, and they should be in sequence sorted by each component. (See semantic version comparison rules.)
* If this is a `1.0.10` release cycle, then yes, the Git commit should be tagged with something like `v1.0.10`.
* Anywhere that you want the version to show up (e.g. the about box), the _main part of the version_ should show exactly `1.0.10`.
* If you want to distinguish between the two packages, you can add them as semantic version _metadata_, e.g. `1.0.10+0`/`1.0.10+1` or `1.0.10+a`/`1.0.10+b` or `1.0.10+win.10`/`1.0.10+win.11`. (The latter is probably closer to what you want.). There is lots of leeway for the metadata, because the semver spec makes it clear that it does not affect the version comparison.
Oh, I see now that the `1.0` and `2.0` are actually a separate versioning scheme you've appended to the main "release cycle" version number. So another easy approach for you would be to simply insert a `+` before the `1.0`/`2.0`, producing `1.0.10+1.0`/`1.0.10+2.0`. This meets your needs, removes all confuses, brings semver compatibility, and (hopefully) can be done with the most trivial of code changes.
Oh, it's so much worse than all that. We were never intentionally trying to follow SemVer (though I do hold it in high regard, and wish I could stay within its light), but until recently we somewhat were.

> _NOTE:_ This ended up longer than I was intending. Please feel free to ignore it or skim it.

The real issue here is the Windows Store. In an ideal world, Terminal would just follow semantic versioning and call it a day. Unfortunately, we're regretfully hampered by a couple limitations.

- Application (and OS!) versions comprise four components, `maj.min.rev.build`
	- Each component is roughly 14 bits wide (limitation 1)
	- On upload to the store, the final component (`build`) _must be `0`_ (limitation 2)
- The store doesn't support semver (!) with all of its high-fidelity metadata
- (Limitation 4 to be called out later)

Under the hood, we actually use a date-based versioning scheme. It's "okay" for most purposes and always monotonically increasing. That is, `maj.min.YYMM.DDBBB` where `BBB` is the build number from that day (just to deduplicate multiple builds produced on the same day.) That results in this mouthful (for executable files packaged with Terminal):

<img width="244" alt="image" src="https://user-images.githubusercontent.com/189190/194965501-d8cd4184-868c-44b8-b1c9-80c7888f7c9a.png">

Now, for limitation 4: we want to follow this versioning scheme because that's the one used by all internally-produced Windows applications that build outside the operating system. I know, it's not a great reason. It could even be called an artificial limitation.

Anyway, due to limitation 2 above, we get to compress the available version space into three components for the final package file that gets uploaded to the store. Thanks to limitation 1, we can't exactly store `YYMMDDBBB` (or even `YYMMDDB`) in 14 bits. _There's probably a way for us to do it that would break around the decade rollover, but... I digress_.

The internally-popular versioning implementation has an answer to this, though! Epoch and day count. `maj.min.EDDDB.0`. `E` is the number of years since `maj.min` was minted, `DDD` is the 3-digit day-of-year, and `B` is of course the same deduplicating build number. Leading zeroes are dropped.

If taken as a historical relic that we shouldn't talk about, all of this would be fine...

...until I had to produce two nearly identical versions of the application during the same build. The format doesn't leave us a lot of fields to work with, so we opted to increment the `B` portion of the version number. That's where the `1.0` and `2.0` are coming from: `1` is the first build of the day, and `2` is its fraternal twin counterpart. It's kinda like we stuck the `1.0` and `2.0` on afterwards, but they were derived from the above calculation.

Anyway, all this so that now I'm looking for options that reduce the cognitive dissonance.

> as long as the "never see the light of day"

The store APIs (and those for package servicing) will expose any version number we encode in our package, even if it's for mechanical/deployment purposes only. I don't think I could ever get rid of it from the public eye entirely.

> `+`

I wish! I think the store just compares the version as a 64-bit number.

---

### Thoughts

I'd love to switch over to semver, and I think Azure DevOps supports storing an ever-incrementing variable across runs that we could key on the `maj.min` version number pair; that could be an easy way to fix this issue... for future releases. Admittedly, that would mean the builds that never see the light of day take up version number slots. I don't know if I care about that.

---

### Citing sources

#### The part of the code that increments `B` for the twin package

https://github.com/microsoft/terminal/blob/21a9c557529212c08db8fadecd0f6135c48a9f2b/custom.props#L5-L15

#### The commit whose body describes (in brief) how all this versioning works for our different product outputs

https://github.com/microsoft/terminal/commit/e22487d10b583053515a8f5afff27b64e86fd77e
I wish GitHub had 😱 as a reaction to posts, that was literally me when reading this explanation.
> I wish GitHub had 😱 as a reaction to posts, that was literally me when reading this explanation.

Don't forget this one: 🤦‍♂️ 
Looping back on this - I'm yanking triage and converting this to track specifically: 


> The feedback here indicates that I should change:
> 
> * Tag the commit with the "pretty" release cycle version (`v1.0.10`)
> * In the About dialog, strip off the `1.0` or `2.0` (or really, the ones place from the revision and the vestigial `.0`)


FWIW I think this might do the second bit, ~but I'm not quite sure how to fake this. Might need to trick VS into building and signing a straight up appx...~

```diff
diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
index c9aa9ff8e..3c6378c66 100644
--- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
+++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
@@ -1015,7 +1015,7 @@ winrt::hstring CascadiaSettings::ApplicationVersion()
     {
         const auto package{ winrt::Windows::ApplicationModel::Package::Current() };
         const auto version{ package.Id().Version() };
-        winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u.%u", version.Major, version.Minor, version.Build, version.Revision) };
+        winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u", version.Major, version.Minor, version.Build / 10) };
         return formatted;
     }
     CATCH_LOG();

```

![image](https://user-images.githubusercontent.com/18356694/210593202-e8887aac-b1bb-499a-8c25-73553286260a.png)

The first bit is just paperwork. 
:tada:This issue was addressed in #14660, which has now been successfully released as `Windows Terminal Preview v1.17.1023`.:tada:

Handy links:
* [Release Notes](https://github.com/microsoft/terminal/releases/tag/v1.17.1023)
* [Store Download](https://www.microsoft.com/store/apps/9n8g5rfz9xk3?cid=storebadge&ocid=badge)

Fix patch:
diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml
index 66590ed1eaf..63464ea4fee 100644
--- a/.github/workflows/winget.yml
+++ b/.github/workflows/winget.yml
@@ -5,7 +5,7 @@ on:
     types: [published]
 
 env:
-  REGEX: 'Microsoft\.WindowsTerminal(?:Preview)?_Win10_([\d.]+)_8wekyb3d8bbwe\.msixbundle$'
+  REGEX: 'Microsoft\.WindowsTerminal(?:Preview)?_([\d.]+)_8wekyb3d8bbwe\.msixbundle$'
 
 jobs:
   publish:
@@ -14,7 +14,7 @@ jobs:
       - name: Publish Windows Terminal ${{ github.event.release.prerelease && 'Preview' || 'Stable' }}
         run: |
           $assets = '${{ toJSON(github.event.release.assets) }}' | ConvertFrom-Json
-          $wingetRelevantAsset = $assets | Where-Object { $_.name -like '*Win10*' } | Select-Object -First 1
+          $wingetRelevantAsset = $assets | Where-Object { $_.name -like '*.msixbundle' } | Select-Object -First 1
           $regex = [Regex]::New($env:REGEX)
           $version = $regex.Match($wingetRelevantAsset.name).Groups[1].Value
 
diff --git a/build/packages.config b/build/packages.config
index 96481841311..ceadd04ac2c 100644
--- a/build/packages.config
+++ b/build/packages.config
@@ -3,8 +3,6 @@
   <package id="MUXCustomBuildTasks" version="1.0.48" targetFramework="native" />
   <package id="Microsoft.Taef" version="10.60.210621002" targetFramework="native" />
   <package id="Microsoft.Internal.PGO-Helpers.Cpp" version="0.2.34" targetFramework="native" />
-  <!-- This cannot be included in another project that depends on XAML (as it would be a duplicate package ID) -->
-  <package id="Microsoft.UI.Xaml" version="2.7.3" targetFramework="native" />
   <package id="Microsoft.Debugging.Tools.PdbStr" version="20220617.1556.0" targetFramework="native" />
   <package id="Microsoft.Debugging.Tools.SrcTool" version="20220617.1556.0" targetFramework="native" />
 </packages>
diff --git a/build/pipelines/release.yml b/build/pipelines/release.yml
index 2fd0f8757db..3f8684c70fe 100644
--- a/build/pipelines/release.yml
+++ b/build/pipelines/release.yml
@@ -56,11 +56,6 @@ parameters:
       - x64
       - x86
       - arm64
-  - name: buildWindowsVersions
-    type: object
-    default:
-      - Win10
-      - Win11
 
 variables:
   MakeAppxPath: 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\MakeAppx.exe'
@@ -87,13 +82,6 @@ variables:
       NuGetPackBetaVersion: preview
   ${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}:
     NuGetPackBetaVersion: experimental
-  # The NuGet packages have to use *somebody's* DLLs. We used to force them to
-  # use the Win10 build outputs, but if there isn't a Win10 build we should use
-  # the Win11 one.
-  ${{ if containsValue(parameters.buildWindowsVersions, 'Win10') }}:
-    TerminalBestVersionForNuGetPackages: Win10
-  ${{ else }}:
-    TerminalBestVersionForNuGetPackages: Win11
 
 name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
 resources:
@@ -107,11 +95,9 @@ jobs:
     matrix:
       ${{ each config in parameters.buildConfigurations }}:
         ${{ each platform in parameters.buildPlatforms }}:
-          ${{ each windowsVersion in parameters.buildWindowsVersions }}:
-            ${{ config }}_${{ platform }}_${{ windowsVersion }}:
-              BuildConfiguration: ${{ config }}
-              BuildPlatform: ${{ platform }}
-              TerminalTargetWindowsVersion: ${{ windowsVersion }}
+          ${{ config }}_${{ platform }}:
+            BuildConfiguration: ${{ config }}
+            BuildPlatform: ${{ platform }}
   displayName: Build
   timeoutInMinutes: 240
   cancelTimeoutInMinutes: 1
@@ -185,10 +171,6 @@ jobs:
       arguments: -MarkdownNoticePath .\NOTICE.md -OutputPath .\src\cascadia\CascadiaPackage\NOTICE.html
       pwsh: true
   - ${{ if eq(parameters.buildTerminal, true) }}:
-    - pwsh: |-
-        ./build/scripts/Patch-ManifestsToWindowsVersion.ps1 -NewWindowsVersion "10.0.22000.0"
-      displayName: Update manifest target version to Win11 (if necessary)
-      condition: and(succeeded(), eq(variables['TerminalTargetWindowsVersion'], 'Win11'))
     - task: VSBuild@1
       displayName: Build solution **\OpenConsole.sln
       condition: true
@@ -205,7 +187,7 @@ jobs:
       continueOnError: True
       inputs:
         PathtoPublish: $(Build.SourcesDirectory)\msbuild.binlog
-        ArtifactName: binlog-$(BuildPlatform)-$(TerminalTargetWindowsVersion)
+        ArtifactName: binlog-$(BuildPlatform)
     - task: PowerShell@2
       displayName: Check MSIX for common regressions
       inputs:
@@ -297,7 +279,7 @@ jobs:
       displayName: Publish Artifact (appx)
       inputs:
         PathtoPublish: $(Build.ArtifactStagingDirectory)/appx
-        ArtifactName: appx-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion)
+        ArtifactName: appx-$(BuildPlatform)-$(BuildConfiguration)
   - ${{ if eq(parameters.buildConPTY, true) }}:
     - task: CopyFiles@2
       displayName: Copy ConPTY to Artifacts
@@ -315,7 +297,7 @@ jobs:
       displayName: Publish Artifact (ConPTY)
       inputs:
         PathtoPublish: $(Build.ArtifactStagingDirectory)/conpty
-        ArtifactName: conpty-dll-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion)
+        ArtifactName: conpty-dll-$(BuildPlatform)-$(BuildConfiguration)
   - ${{ if eq(parameters.buildWPF, true) }}:
     - task: CopyFiles@2
       displayName: Copy PublicTerminalCore.dll to Artifacts
@@ -329,7 +311,7 @@ jobs:
       displayName: Publish Artifact (PublicTerminalCore)
       inputs:
         PathtoPublish: $(Build.ArtifactStagingDirectory)/wpf
-        ArtifactName: wpf-dll-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion)
+        ArtifactName: wpf-dll-$(BuildPlatform)-$(BuildConfiguration)
 
   - task: PublishSymbols@2
     displayName: Publish symbols path
@@ -347,11 +329,6 @@ jobs:
 
 - ${{ if eq(parameters.buildTerminal, true) }}:
   - job: BundleAndSign
-    strategy:
-      matrix:
-        ${{ each windowsVersion in parameters.buildWindowsVersions }}:
-          ${{ windowsVersion }}:
-            TerminalTargetWindowsVersion: ${{ windowsVersion }}
     displayName: Create and sign AppX/MSIX bundles
     variables:
       ${{ if eq(parameters.branding, 'Release') }}:
@@ -373,9 +350,9 @@ jobs:
         disableOutputRedirect: true
     - ${{ each platform in parameters.buildPlatforms }}:
       - task: DownloadBuildArtifacts@0
-        displayName: Download Artifacts ${{ platform }} $(TerminalTargetWindowsVersion)
+        displayName: Download Artifacts ${{ platform }}
         inputs:
-          artifactName: appx-${{ platform }}-Release-$(TerminalTargetWindowsVersion)
+          artifactName: appx-${{ platform }}-Release
     # Add 3000 to the major version component, but only for the bundle.
     # This is to ensure that it is newer than "2022.xx.yy.zz" or whatever the original bundle versions were before
     # we switched to uniform naming.
@@ -385,7 +362,7 @@ jobs:
         $Components[0] = ([int]$Components[0] + $VersionEpoch)
         $BundleVersion = $Components -Join "."
         New-Item -Type Directory "$(System.ArtifactsDirectory)\bundle"
-        .\build\scripts\Create-AppxBundle.ps1 -InputPath "$(System.ArtifactsDirectory)" -ProjectName CascadiaPackage -BundleVersion $BundleVersion -OutputPath "$(System.ArtifactsDirectory)\bundle\$(BundleStemName)_$(TerminalTargetWindowsVersion)_$(XES_APPXMANIFESTVERSION)_8wekyb3d8bbwe.msixbundle"
+        .\build\scripts\Create-AppxBundle.ps1 -InputPath "$(System.ArtifactsDirectory)" -ProjectName CascadiaPackage -BundleVersion $BundleVersion -OutputPath "$(System.ArtifactsDirectory)\bundle\$(BundleStemName)_$(XES_APPXMANIFESTVERSION)_8wekyb3d8bbwe.msixbundle"
       displayName: Create WindowsTerminal*.msixbundle
     - task: EsrpCodeSigning@1
       displayName: Submit *.msixbundle to ESRP for code signing
@@ -426,7 +403,7 @@ jobs:
       displayName: 'Publish Artifact: appxbundle-signed'
       inputs:
         PathtoPublish: $(System.ArtifactsDirectory)\bundle
-        ArtifactName: appxbundle-signed-$(TerminalTargetWindowsVersion)
+        ArtifactName: appxbundle-signed
 
 - ${{ if eq(parameters.buildConPTY, true) }}:
   - job: PackageAndSignConPTY
@@ -451,7 +428,7 @@ jobs:
       - task: DownloadBuildArtifacts@0
         displayName: Download ${{ platform }} ConPTY binaries
         inputs:
-          artifactName: conpty-dll-${{ platform }}-$(BuildConfiguration)-$(TerminalBestVersionForNuGetPackages)
+          artifactName: conpty-dll-${{ platform }}-$(BuildConfiguration)
           downloadPath: bin\${{ platform }}\$(BuildConfiguration)\
           extractTars: false
     - task: PowerShell@2
@@ -542,7 +519,7 @@ jobs:
       - task: DownloadBuildArtifacts@0
         displayName: Download ${{ platform }} PublicTerminalCore
         inputs:
-          artifactName: wpf-dll-${{ platform }}-$(BuildConfiguration)-$(TerminalBestVersionForNuGetPackages)
+          artifactName: wpf-dll-${{ platform }}-$(BuildConfiguration)
           itemPattern: '**/*.dll'
           downloadPath: bin\${{ platform }}\$(BuildConfiguration)\
           extractTars: false
@@ -640,11 +617,10 @@ jobs:
 
     # Download the appx-PLATFORM-CONFIG-VERSION artifact for every platform/version combo
     - ${{ each platform in parameters.buildPlatforms }}:
-      - ${{ each windowsVersion in parameters.buildWindowsVersions }}:
-        - task: DownloadBuildArtifacts@0
-          displayName: Download Symbols ${{ platform }} ${{ windowsVersion }}
-          inputs:
-            artifactName: appx-${{ platform }}-Release-${{ windowsVersion }}
+      - task: DownloadBuildArtifacts@0
+        displayName: Download Symbols ${{ platform }}
+        inputs:
+          artifactName: appx-${{ platform }}-Release
 
     # It seems easier to do this -- download every appxsym -- then enumerate all the PDBs in the build directory for the
     # public symbol push. Otherwise, we would have to list all of the PDB files one by one.
@@ -704,7 +680,7 @@ jobs:
     - task: DownloadBuildArtifacts@0
       displayName: Download Build Artifacts
       inputs:
-        artifactName: appxbundle-signed-Win11
+        artifactName: appxbundle-signed
         extractTars: false
     - task: PowerShell@2
       displayName: Rename and stage packages for vpack
@@ -713,7 +689,7 @@ jobs:
         script: >-
           # Rename to known/fixed name for Windows build system
 
-          Get-ChildItem Microsoft.WindowsTerminal_Win11_*.msixbundle | Rename-Item -NewName { 'Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle' }
+          Get-ChildItem Microsoft.WindowsTerminal_*.msixbundle | Rename-Item -NewName { 'Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle' }
 
 
           # Create vpack directory and place item inside
@@ -721,13 +697,13 @@ jobs:
           mkdir WindowsTerminal.app
 
           mv Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle .\WindowsTerminal.app\
-        workingDirectory: $(System.ArtifactsDirectory)\appxbundle-signed-Win11
+        workingDirectory: $(System.ArtifactsDirectory)\appxbundle-signed
     - task: PkgESVPack@12
       displayName: 'Package ES - VPack'
       env:
         SYSTEM_ACCESSTOKEN: $(System.AccessToken)
       inputs:
-        sourceDirectory: $(System.ArtifactsDirectory)\appxbundle-signed-Win11\WindowsTerminal.app
+        sourceDirectory: $(System.ArtifactsDirectory)\appxbundle-signed\WindowsTerminal.app
         description: VPack for the Windows Terminal Application
         pushPkgName: WindowsTerminal.app
         owner: conhost
diff --git a/build/scripts/Patch-ManifestsToWindowsVersion.ps1 b/build/scripts/Patch-ManifestsToWindowsVersion.ps1
deleted file mode 100644
index fe86f24fd8c..00000000000
--- a/build/scripts/Patch-ManifestsToWindowsVersion.ps1
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-# Licensed under the MIT license.
-
-Param(
-	[string]$NewWindowsVersion = "10.0.22000.0"
-)
-
-Get-ChildItem src/cascadia/CascadiaPackage -Recurse -Filter *.appxmanifest | ForEach-Object {
-	$xml = [xml](Get-Content $_.FullName)
-	$xml.Package.Dependencies.TargetDeviceFamily | Where-Object Name -Like "Windows*" | ForEach-Object {
-		$_.MinVersion = $NewWindowsVersion
-	}
-	$xml.Save($_.FullName)
-}
diff --git a/common.openconsole.props b/common.openconsole.props
index f6eb4c7c94d..c8f43e3602f 100644
--- a/common.openconsole.props
+++ b/common.openconsole.props
@@ -10,22 +10,4 @@
     <OpenConsoleDir>$(MSBuildThisFileDirectory)</OpenConsoleDir>
   </PropertyGroup>
 
-  <PropertyGroup>
-    <!--
-    For the Windows 10 build, we're targeting the prerelease version of Microsoft.UI.Xaml.
-    This version emits every XAML DLL directly into our package.
-    This is a workaround for us not having deliverable MSFT-21242953 on this version of Windows.
-
-    This version should be tracked in all project packages.config files for projects that depend on Xaml.
-    -->
-    <TerminalMUXVersion>2.7.3-prerelease.220816001</TerminalMUXVersion>
-    <!--
-    For the Windows 11-specific build, we're targeting the public version of Microsoft.UI.Xaml.
-    This version emits a package dependency instead of embedding the dependency in our own package.
-
-    This version should be tracked in build/packages.config.
-    -->
-    <TerminalMUXVersion Condition="'$(TerminalTargetWindowsVersion)'=='Win11'">2.7.3</TerminalMUXVersion>
-  </PropertyGroup>
-
 </Project>
diff --git a/custom.props b/custom.props
index 0983ed7a6f5..93c4f49ff7a 100644
--- a/custom.props
+++ b/custom.props
@@ -2,18 +2,6 @@
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <!-- This file is read by XES, which we use in our Release builds. -->
   <PropertyGroup Label="Version">
-    <!--
-      The Windows 11 build is going to have the same package name, so it *must* have a different version.
-      The easiest way for us to do this is to add 1 to the revision field.
-      In short, for a given Terminal build 1.11, we will emit two different versions (assume this is build
-      4 on day 23 of the year):
-        - 1.11.234.0 for Windows 10
-        - 1.11.235.0 for Windows 11
-      This presents a potential for conflicts if we want to ship two builds produced back to back on the
-      same day... which is terribly unlikely.
-    -->
-    <VersionBuildRevision Condition="'$(TerminalTargetWindowsVersion)'=='Win11' and '$(VersionBuildRevision)'!=''">$([MSBuild]::Add($(VersionBuildRevision), 1))</VersionBuildRevision>
-
     <XesUseOneStoreVersioning>true</XesUseOneStoreVersioning>
     <XesBaseYearForStoreVersion>2023</XesBaseYearForStoreVersion>
     <VersionMajor>1</VersionMajor>
diff --git a/dep/nuget/packages.config b/dep/nuget/packages.config
index 0375989854c..5015d1ee970 100644
--- a/dep/nuget/packages.config
+++ b/dep/nuget/packages.config
@@ -8,7 +8,7 @@
   <package id="Microsoft.VCRTForwarders.140" version="1.0.4" targetFramework="native" />
   <package id="Microsoft.Internal.Windows.Terminal.ThemeHelpers" version="0.6.220404001" targetFramework="native" />
   <package id="Microsoft.VisualStudio.Setup.Configuration.Native" version="2.3.2262" targetFramework="native" developmentDependency="true" />
-  <package id="Microsoft.UI.Xaml" version="2.7.3-prerelease.220816001" targetFramework="native" />
+  <package id="Microsoft.UI.Xaml" version="2.7.3" targetFramework="native" />
   <package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220201.1" targetFramework="native" developmentDependency="true" />
 
   <!-- Managed packages -->
diff --git a/src/cascadia/LocalTests_SettingsModel/SettingsModel.LocalTests.vcxproj b/src/cascadia/LocalTests_SettingsModel/SettingsModel.LocalTests.vcxproj
index 945b5a17b57..dbd279005be 100644
--- a/src/cascadia/LocalTests_SettingsModel/SettingsModel.LocalTests.vcxproj
+++ b/src/cascadia/LocalTests_SettingsModel/SettingsModel.LocalTests.vcxproj
@@ -20,6 +20,7 @@
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <OpenConsoleCppWinRTProject>true</OpenConsoleCppWinRTProject>
     <!-- TerminalCppWinrt is not set intentionally -->
+    <TerminalMUX>true</TerminalMUX>
   </PropertyGroup>
 
   <Import Project="$(SolutionDir)\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
@@ -97,15 +98,4 @@
   <Import Project="$(OpenConsoleDir)src\common.build.post.props" />
   <Import Project="$(OpenConsoleDir)src\common.build.tests.props" />
   <Import Project="$(OpenConsoleDir)src\common.nugetversions.targets" />
-
-  <PropertyGroup>
-    <!-- From Microsoft.UI.Xaml.targets -->
-    <Native-Platform Condition="'$(Platform)' == 'Win32'">x86</Native-Platform>
-    <Native-Platform Condition="'$(Platform)' != 'Win32'">$(Platform)</Native-Platform>
-    <_MUXBinRoot>&quot;$(OpenConsoleDir)packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\runtimes\win10-$(Native-Platform)\native\&quot;</_MUXBinRoot>
-  </PropertyGroup>
-
-  <!-- We actually can just straight up reference MUX here, it's fine -->
-  <Import Project="..\..\..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('..\..\..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets')" />
-
 </Project>
diff --git a/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj b/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj
index f60d2a4f679..e5a00d2d892 100644
--- a/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj
+++ b/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj
@@ -23,6 +23,7 @@
 
   <PropertyGroup Label="NuGet Dependencies">
     <!-- TerminalCppWinrt is intentionally not set -->
+    <TerminalMUX>true</TerminalMUX>
   </PropertyGroup>
 
   <Import Project="$(SolutionDir)\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
@@ -85,15 +86,4 @@
   <Import Project="$(OpenConsoleDir)src\common.build.post.props" />
   <Import Project="$(OpenConsoleDir)src\common.build.tests.props" />
   <Import Project="$(OpenConsoleDir)src\common.nugetversions.targets" />
-
-  <PropertyGroup>
-    <!-- From Microsoft.UI.Xaml.targets -->
-    <Native-Platform Condition="'$(Platform)' == 'Win32'">x86</Native-Platform>
-    <Native-Platform Condition="'$(Platform)' != 'Win32'">$(Platform)</Native-Platform>
-    <_MUXBinRoot>&quot;$(OpenConsoleDir)packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\runtimes\win10-$(Native-Platform)\native\&quot;</_MUXBinRoot>
-  </PropertyGroup>
-
-<!-- We actually can just straight up reference MUX here, it's fine -->
-  <Import Project="..\..\..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('..\..\..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets')" />
-
 </Project>
diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj b/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj
index d51a96986af..9e2029c9bcc 100644
--- a/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj
+++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj
@@ -16,6 +16,8 @@
     <OpenConsoleCppWinRTProject>true</OpenConsoleCppWinRTProject>
     <EnableHybridCRT>false</EnableHybridCRT> <!-- C++/CLI projects can't deal -->
 
+    <TerminalMUX>true</TerminalMUX>
+
     <!--
     These two properties are very important!
     Without them, msbuild will stomp MinVersion and MaxVersionTested in the
@@ -126,8 +128,6 @@
     </Reference>
   </ItemGroup>
 
-  <Import Project="$(OpenConsoleDir)\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('$(OpenConsoleDir)\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets')" />
-
   <Import Project="$(OpenConsoleDir)\src\common.build.post.props" />
   <Import Project="$(OpenConsoleDir)\src\common.nugetversions.targets" />
 
diff --git a/src/cascadia/TerminalApp/TerminalAppLib.vcxproj b/src/cascadia/TerminalApp/TerminalAppLib.vcxproj
index bac8780ef0c..b0815429e30 100644
--- a/src/cascadia/TerminalApp/TerminalAppLib.vcxproj
+++ b/src/cascadia/TerminalApp/TerminalAppLib.vcxproj
@@ -316,7 +316,6 @@
     <PRIResource Include="Resources\en-US\Resources.resw" />
     <PRIResource Include="Resources\en-US\ContextMenu.resw" />
     <OCResourceDirectory Include="Resources" />
-    <None Include="packages.config" />
   </ItemGroup>
   <!-- ========================= Project References ======================== -->
   <ItemGroup>
diff --git a/src/cascadia/TerminalApp/packages.config b/src/cascadia/TerminalApp/packages.config
deleted file mode 100644
index e151e41548d..00000000000
--- a/src/cascadia/TerminalApp/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Microsoft.UI.Xaml" version="2.7.3-prerelease.220816001" targetFramework="native" />
-</packages>
diff --git a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj
index 754c492bc6e..93db4ca918e 100644
--- a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj
+++ b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj
@@ -353,7 +353,6 @@
     </PRIResource>
     <OCResourceDirectory Include="Resources" />
     <None Include="$(ProjectName).def" />
-    <None Include="packages.config" />
   </ItemGroup>
   <!-- ========================= Project References ======================== -->
   <ItemGroup>
diff --git a/src/cascadia/TerminalSettingsEditor/packages.config b/src/cascadia/TerminalSettingsEditor/packages.config
deleted file mode 100644
index 0661e593971..00000000000
--- a/src/cascadia/TerminalSettingsEditor/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Microsoft.UI.Xaml" version="2.7.3" targetFramework="native" />
-</packages>
diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
index 90c2dc55280..acf312f7ccf 100644
--- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
+++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
@@ -1015,12 +1015,7 @@ winrt::hstring CascadiaSettings::ApplicationVersion()
     {
         const auto package{ winrt::Windows::ApplicationModel::Package::Current() };
         const auto version{ package.Id().Version() };
-        // As of about 2022, the ones digit of the Build of our version is a
-        // placeholder value to differentiate the Windows 10 build from the
-        // Windows 11 build. Let's trim that out. For additional clarity,
-        // let's omit the Revision, which _must_ be .0, and doesn't provide any
-        // value to report.
-        winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u", version.Major, version.Minor, version.Build / 10) };
+        winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u.%u", version.Major, version.Minor, version.Build, version.Revision) };
         return formatted;
     }
     CATCH_LOG();
diff --git a/src/cascadia/WindowsTerminal/WindowsTerminal.vcxproj b/src/cascadia/WindowsTerminal/WindowsTerminal.vcxproj
index 85359d58274..2379a6430a2 100644
--- a/src/cascadia/WindowsTerminal/WindowsTerminal.vcxproj
+++ b/src/cascadia/WindowsTerminal/WindowsTerminal.vcxproj
@@ -79,9 +79,6 @@
   <ItemGroup>
     <Manifest Include="WindowsTerminal.manifest" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
   <!-- Dependencies -->
   <ItemGroup>
     <!-- Even though we do have proper recursive dependencies, we want to keep some of these here
diff --git a/src/cascadia/WindowsTerminal/packages.config b/src/cascadia/WindowsTerminal/packages.config
deleted file mode 100644
index 0661e593971..00000000000
--- a/src/cascadia/WindowsTerminal/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Microsoft.UI.Xaml" version="2.7.3" targetFramework="native" />
-</packages>
diff --git a/src/cascadia/ut_app/TerminalApp.UnitTests.vcxproj b/src/cascadia/ut_app/TerminalApp.UnitTests.vcxproj
index 2825323d203..c6393d7add8 100644
--- a/src/cascadia/ut_app/TerminalApp.UnitTests.vcxproj
+++ b/src/cascadia/ut_app/TerminalApp.UnitTests.vcxproj
@@ -81,13 +81,6 @@
   <Import Project="$(OpenConsoleDir)src\common.build.tests.props" />
   <Import Project="$(SolutionDir)src\common.nugetversions.targets" />
 
-  <PropertyGroup>
-    <!-- From Microsoft.UI.Xaml.targets -->
-    <Native-Platform Condition="'$(Platform)' == 'Win32'">x86</Native-Platform>
-    <Native-Platform Condition="'$(Platform)' != 'Win32'">$(Platform)</Native-Platform>
-    <_MUXBinRoot>&quot;$(OpenConsoleDir)packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\runtimes\win10-$(Native-Platform)\native\&quot;</_MUXBinRoot>
-  </PropertyGroup>
-
   <ItemDefinitionGroup>
     <PreBuildEvent>
       <!-- Manually copy the Windows Terminal manifest to our project directory,
diff --git a/src/common.nugetversions.targets b/src/common.nugetversions.targets
index b9b32706a3b..91a26fdf59a 100644
--- a/src/common.nugetversions.targets
+++ b/src/common.nugetversions.targets
@@ -53,7 +53,7 @@
     <Import Project="$(MSBuildThisFileDirectory)..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.2.3.2262\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets" Condition="'$(TerminalVisualStudioSetup)' == 'true' and Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.2.3.2262\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" />
 
     <!-- WinUI (which depends on WebView2 as of 2.8.0) -->
-    <Import Project="$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets" Condition="'$(TerminalMUX)' == 'true' and Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets')" />
+    <Import Project="$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.2.7.3\build\native\Microsoft.UI.Xaml.targets" Condition="'$(TerminalMUX)' == 'true' and Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.2.7.3\build\native\Microsoft.UI.Xaml.targets')" />
 
     <!-- WIL (so widely used that this one does not have a TerminalWIL opt-in property; it is automatic) -->
     <Import Project="$(MSBuildThisFileDirectory)..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220201.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220201.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
@@ -86,7 +86,7 @@
     <Error Condition="'$(TerminalVisualStudioSetup)' == 'true' AND !Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.2.3.2262\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildThisFileDirectory)..\packages\Microsoft.VisualStudio.Setup.Configuration.Native.2.3.2262\build\native\Microsoft.VisualStudio.Setup.Configuration.Native.targets'))" />
 
     <!-- WinUI (which depends on WebView2 as of 2.8.0) -->
-    <Error Condition="'$(TerminalMUX)' == 'true' AND !Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.$(TerminalMUXVersion)\build\native\Microsoft.UI.Xaml.targets'))" />
+    <Error Condition="'$(TerminalMUX)' == 'true' AND !Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.2.7.3\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildThisFileDirectory)..\packages\Microsoft.UI.Xaml.2.7.3\build\native\Microsoft.UI.Xaml.targets'))" />
 
     <!-- WIL (so widely used that this one does not have a TerminalWIL opt-in property; it is automatic) -->
     <Error Condition="!Exists('$(MSBuildThisFileDirectory)..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220201.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(MSBuildThisFileDirectory)..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220201.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />


Test patch: