diff --git a/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs b/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs
index d27f2b25..4a0ab522 100644
--- a/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs
+++ b/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs
@@ -19,7 +19,7 @@ namespace PackageUploader.UI.Resources.Strings {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class MainPage {
@@ -177,6 +177,15 @@ public static string MakePackageNotFoundErrorMsg {
}
}
+ ///
+ /// Looks up a localized string similar to MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started..
+ ///
+ public static string MakePkg2NotFoundErrorMsg {
+ get {
+ return ResourceManager.GetString("MakePkg2NotFoundErrorMsg", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Maximize.
///
@@ -204,6 +213,16 @@ public static string Msixvc2BodyText {
}
}
+ ///
+ /// Looks up a localized string similar to Point to your loose file directory containing a MicrosoftGame.config for your PC game. Your files will be packaged and uploaded using the MSIXVC2 format — no pre-built package required.
+ ///Learn more: https://aka.ms/MSIXVC2.
+ ///
+ public static string Msixvc2BodyTextWithLink {
+ get {
+ return ResourceManager.GetString("Msixvc2BodyTextWithLink", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Get started.
///
@@ -214,11 +233,11 @@ public static string Msixvc2ButtonText {
}
///
- /// Looks up a localized string similar to MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started..
+ /// Looks up a localized string similar to MSIXVC2 Preview.
///
- public static string MakePkg2NotFoundErrorMsg {
+ public static string Msixvc2SubtitleText {
get {
- return ResourceManager.GetString("MakePkg2NotFoundErrorMsg", resourceCulture);
+ return ResourceManager.GetString("Msixvc2SubtitleText", resourceCulture);
}
}
diff --git a/src/PackageUploader.UI/Resources/Strings/MainPage.resx b/src/PackageUploader.UI/Resources/Strings/MainPage.resx
index 99a083b6..fd6e9d53 100644
--- a/src/PackageUploader.UI/Resources/Strings/MainPage.resx
+++ b/src/PackageUploader.UI/Resources/Strings/MainPage.resx
@@ -206,6 +206,13 @@
Get started
+
+ MSIXVC2 Preview
+
+
+ Point to your loose file directory containing a MicrosoftGame.config for your PC game. Your files will be packaged and uploaded using the MSIXVC2 format — no pre-built package required.
+Learn more: https://aka.ms/MSIXVC2
+
MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started.
diff --git a/src/PackageUploader.UI/View/MainPageView.xaml b/src/PackageUploader.UI/View/MainPageView.xaml
index 4c622a02..66aec8b6 100644
--- a/src/PackageUploader.UI/View/MainPageView.xaml
+++ b/src/PackageUploader.UI/View/MainPageView.xaml
@@ -240,13 +240,29 @@
Margin="6,0,0,0"
VerticalAlignment="Center"
Visibility="{Binding IsCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}"
- ToolTip="{x:Static strings:MainPage.Msixvc2BodyText}">
+ ToolTip="{x:Static strings:MainPage.Msixvc2BodyTextWithLink}">
+
+
+
+
+
+
+
+ ToolTip="{x:Static strings:MainPage.Msixvc2BodyTextWithLink}">
diff --git a/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs b/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs
index 6b42358f..eaeee59e 100644
--- a/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs
+++ b/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs
@@ -17,7 +17,11 @@ public Msixvc2UploadView(Msixvc2UploadViewModel viewModel)
_viewModel = viewModel;
// Register drag drop event handlers after control is initialized
- this.Loaded += (s, e) => RegisterDragDropHandlers();
+ this.Loaded += (s, e) =>
+ {
+ RegisterDragDropHandlers();
+ _viewModel.RefreshBranchesAsync();
+ };
}
private void RegisterDragDropHandlers()
diff --git a/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs b/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs
index 9d15c81f..fd693459 100644
--- a/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs
+++ b/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs
@@ -374,6 +374,54 @@ private async void GetProductInfoAsync()
}
}
+ public async void RefreshBranchesAsync()
+ {
+ if (_gameProduct == null || string.IsNullOrEmpty(BigId) || BigId == "None")
+ {
+ return;
+ }
+
+ string previousSelection = BranchOrFlightDisplayName;
+
+ IsLoadingBranchesAndFlights = true;
+ BranchOrFlightErrorMessage = string.Empty;
+
+ try
+ {
+ _branchesAndFlights = await _uploaderService.GetPackageBranchesAsync(_gameProduct, CancellationToken.None);
+
+ List displayNames = [];
+ foreach (var branch in _branchesAndFlights)
+ {
+ if (branch.BranchType == GamePackageBranchType.Branch)
+ displayNames.Add("Branch: " + branch.Name);
+ else if (branch.BranchType == GamePackageBranchType.Flight)
+ displayNames.Add("Flight: " + branch.Name);
+ }
+ BranchAndFlightNames = [.. displayNames];
+
+ if (!string.IsNullOrEmpty(previousSelection) && displayNames.Contains(previousSelection))
+ {
+ BranchOrFlightDisplayName = previousSelection;
+ }
+ else
+ {
+ string mainBranch = displayNames.FirstOrDefault(n => n.Equals("Branch: Main", StringComparison.OrdinalIgnoreCase), string.Empty);
+ BranchOrFlightDisplayName = !string.IsNullOrEmpty(mainBranch) ? mainBranch : BranchAndFlightNames.FirstOrDefault(string.Empty);
+ }
+ OnPropertyChanged(nameof(BranchOrFlightDisplayName));
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error refreshing branches for BigId {BigId}.", BigId);
+ BranchOrFlightErrorMessage = $"Error refreshing branches: {ex.Message}";
+ }
+ finally
+ {
+ IsLoadingBranchesAndFlights = false;
+ }
+ }
+
private async void UpdateMarketGroups()
{
if (_branchesAndFlights == null)