Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/PackageUploader.UI/Model/PackageModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ public class PackageModel
public string FolderSize { get; set; } = string.Empty;
public string UploadArguments { get; set; } = string.Empty;
public string MakePkg2Path { get; set; } = string.Empty;
public Type? UploadOriginPage { get; set; } = null;
}
1 change: 1 addition & 0 deletions src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ private void StartPackAndUploadAsync()
_packageModelProvider.Package.FolderSize = EstimatedFolderSize;
_packageModelProvider.Package.UploadArguments = uploadArgs;
_packageModelProvider.Package.MakePkg2Path = makePkg2Path;
_packageModelProvider.Package.UploadOriginPage = typeof(Msixvc2UploadView);
if (branchOrFlight != null)
{
_packageModelProvider.Package.BranchId = branchOrFlight.CurrentDraftInstanceId;
Expand Down
4 changes: 2 additions & 2 deletions src/PackageUploader.UI/ViewModel/Msixvc2UploadingViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ private void CancelUpload()

System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
_windowService.NavigateTo(typeof(Msixvc2UploadView));
_windowService.NavigateTo(_packageModelProvider.Package.UploadOriginPage ?? typeof(Msixvc2UploadView));
});
}

Expand Down Expand Up @@ -346,7 +346,7 @@ private void SetErrorAndGoToErrorPage(string title, string detail)
{
_errorModelProvider.Error.MainMessage = title;
_errorModelProvider.Error.DetailMessage = detail;
_errorModelProvider.Error.OriginPage = typeof(Msixvc2UploadView);
_errorModelProvider.Error.OriginPage = _packageModelProvider.Package.UploadOriginPage ?? typeof(Msixvc2UploadView);
_errorModelProvider.Error.LogsPath = _lastLogFilePath;

System.Windows.Application.Current.Dispatcher.Invoke(() =>
Expand Down
37 changes: 37 additions & 0 deletions src/PackageUploader.UI/ViewModel/PackageCreationViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,9 @@ private async void StartMakePackageProcess()

if (UseMsixvc2)
{
// According to the SubmissionValidator development team, an upcoming version will no longer have this dependency and this workaround will be removable
CopyXsapiDllToSettingsFolder(_settingsFolder);

string msixvc2CmdFormat = "pack /f \"{0}\" /pd \"{1}\" /d \"{2}\" /msixvc2 /updatesubval /validationpath \"{3}\"";
arguments = string.Format(msixvc2CmdFormat, MappingDataXmlPath, buildPath, GameDataPath, _settingsFolder);
executablePath = _pathConfigurationService.MakePkg2Path;
Expand Down Expand Up @@ -900,6 +903,40 @@ private bool PopulateSubValArgs(string settingsFolder, ref string arguments)
return true;
}

/// <summary>
/// Copies XSAPI.dll from the GDK bin folder to the settings folder if it exists.
/// SubmissionValidator.dll has a native dependency on XSAPI.dll, and when makepkg2 downloads
/// a fresh validator via /updatesubval, XSAPI.dll must be in the same directory for it to load.
/// </summary>
private void CopyXsapiDllToSettingsFolder(string settingsFolder)
{
try
{
string? gdkBinDir = Path.GetDirectoryName(_pathConfigurationService.BaseSubValPath);
if (string.IsNullOrEmpty(gdkBinDir))
{
return;
}

string sourceXsapi = Path.Combine(gdkBinDir, "xsapi.dll");
if (!File.Exists(sourceXsapi))
{
return;
}

string destXsapi = Path.Combine(settingsFolder, "xsapi.dll");
if (!File.Exists(destXsapi))
{
File.Copy(sourceXsapi, destXsapi, overwrite: false);
_logger.LogInformation("Copied xsapi.dll to settings folder for SubmissionValidator dependency.");
}
}
catch (Exception ex)
{
_logger.LogWarning("Failed to copy xsapi.dll to settings folder: {message}", ex.Message);
}
}

private async Task GenerateMappingFile(string tempBuildPath)
{
Process? makePackageProcess;
Expand Down
1 change: 1 addition & 0 deletions src/PackageUploader.UI/ViewModel/PackageUploadViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,7 @@ private void StartMsixvc2Upload()
Package.FolderSize = PackageSize;
Package.UploadArguments = uploadArgs;
Package.MakePkg2Path = makePkg2Path;
Package.UploadOriginPage = typeof(PackageUploadView);
if (branchOrFlight != null)
{
Package.BranchId = branchOrFlight.CurrentDraftInstanceId;
Expand Down
Loading