WindowsAppSDK icon indicating copy to clipboard operation
WindowsAppSDK copied to clipboard

1.8 Create app bundle fails when manifest contains scaled images

Open MUJaCHe66 opened this issue 4 months ago • 14 comments

Describe the bug

Using scaled visual assets in the package.appxmanifest results in the following error when trying to create a bundled app package -

The "WinAppSdkSignAppxPackageBundle" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\amd64" directory.

This is for Winui Blank App Packaged. The exact same images worked perfectly in 1.7.

Steps to reproduce the bug

  1. Create new Winui Blank App Packaged with 1.8
  2. Create bundled package - no problem.
  3. Add scaled visual asset to manifest eg. SmallTile.scale-100.png.
  4. Create bundled package - Computer says no! Error MSB4036.
  5. Remove any scaled visuals and packages are again created no problem.

Expected behavior

No response

Screenshots

No response

NuGet package version

Windows App SDK 1.8.0: 1.8.250907003

Packaging type

Packaged (MSIX)

Windows version

Insider Build (xxxxx)

IDE

Other

Additional context

Windows Version 25H2 IDE VS 2026 Insider

MUJaCHe66 avatar Sep 11 '25 15:09 MUJaCHe66

My project also fail to Package & Publish after update to 1.8 with error: The "WinAppSdkSignAppxPackageBundle" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64" directory.

oden3d avatar Sep 17 '25 15:09 oden3d

@ssparach @Scottj1s Please note that

  1. UapAppxPackageBuildMode = SideloadOnly works fine
  2. UapAppxPackageBuildMode = CI or StoreUpload cause the exception: microsoft.windows.sdk.buildtools.msix\1.7.20250829.1\build\Microsoft.Windows.SD K.BuildTools.MSIX.Packaging.targets(2327,5): error MSB4036: The "WinAppSdkSignAppxPackageBundle" task was not found

I think this is the primary blocker from publishing Windows App SDK v1.8 and should be fixed ASAP

zhuxb711 avatar Sep 18 '25 04:09 zhuxb711

@ssparach @Scottj1s

I dig into the root cause it's a typo error !!!!

The only task that exists in the Microsoft.Windows.SDK.BuildTools.MSIX.Packaging.targets is WinAppSdkSignAppxPackage instead of WinAppSdkSignAppxPackageBundle

  <!-- Signing -->
  <UsingTask AssemblyFile="$(MsixTaskAssembly)" TaskName="$(MsixTaskAssemblyNamespace).Crypto.WinAppSdkSignAppxPackage" />

In the Target _CreateUploadResourcePackages your team use the name WinAppSdkSignAppxPackageBundle which is is totally incorrect

  <Target Name="_CreateUploadResourcePackages"
        Inputs="@(_AppxUploadBundleResourceFileMaps)"
        Outputs="%(ResourcePack)"
        Condition="'$(AppxBundleResourcePacksProducingPlatform)' == '$(PackageArchitecture)' and
                     '$(BuildAppxUploadPackageForUap)' == 'true' and
                     '$(UseAppxLayout)' != 'true'"
        DependsOnTargets="_FindAppxContentGroupMap">

    <WinAppSdkMakeAppxPack MakeAppxExeFullPath="$(MakeAppxExeFullPath)"
                  AppxContentGroupMap="$(AppxContentGroupMapFullPath)"
                  AppxStreamableMainPackage="$(AppxStreamableMainPackage)"
                  AppxStreamableResourcePackages="$(AppxStreamableResourcePackages)"
                  ResourcePack="true"
                  Parameters="$(CreateResourcePackageMakeAppxParameters)"
                  HashAlgorithmId="$(AppxHashAlgorithmId)"
                  ValidateResourcesReferencedByManifest="false"
                  AppxManifest="@(AppxUploadManifestForBundle)"
                  FileMap="%(_AppxUploadBundleResourceFileMaps.Identity)"
                  Output="%(_AppxUploadBundleResourceFileMaps.ResourcePack)"
                  VsTelemetrySession="$(VsTelemetrySession)"
                  IsUploadPackageOrComponent="true"
                      />

    <!--👇👇👇 Typo, Replace it with WinAppSdkSignAppxPackage 👇👇👇-->

    <WinAppSdkSignAppxPackageBundle Condition="'$(AppxPackageSigningEnabled)' == 'true'"
                     AppxPackageToSign="%(_AppxUploadBundleResourceFileMaps.ResourcePack)"
                     CertificateThumbprint="$(PackageCertificateThumbprint)"
                     CertificateFile="$(PackageCertificateKeyFile)"
                     CertificatePassword="$(PackageCertificatePassword)"
                     HashAlgorithmId="$(AppxHashAlgorithmId)"
                     EnableSigningChecks="$(EnableSigningChecks)"
                     SignAppxPackageExeFullPath="$(SignAppxPackageExeFullPath)"
                     TempCertificateFilePath="$(TempCertificateFilePath)"
                     VsTelemetrySession="$(VsTelemetrySession)"
                     SigningTimestampServerUrl="$(AppxPackageSigningTimestampServerUrl)"
                     SigningTimestampDigestAlgorithm="$(AppxPackageSigningTimestampDigestAlgorithm)"
                     AzureCodeSigningEnabled="$(AzureCodeSigningEnabled)"
                     AzureCodeSigningDlibFilePath="$(AzureCodeSigningDlibFilePath)"
                     AzureCodeSigningEndpoint="$(AzureCodeSigningEndpoint)"
                     AzureCodeSigningAccountName="$(AzureCodeSigningAccountName)"
                     AzureCodeSigningCertificateProfileName="$(AzureCodeSigningCertificateProfileName)"
                     AzureKeyVaultEnabled="$(AzureKeyVaultEnabled)"
                     AzureKeyVaultDlibFilePath="$(AzureKeyVaultDlibFilePath)"
                     AzureKeyVaultUrl="$(AzureKeyVaultUrl)"
                     AzureKeyVaultCertificateId="$(AzureKeyVaultCertificateId)"/>

    <Message Importance="high" Condition="'$(AppxPackageSigningEnabled)' == 'true'" Text="$(MSBuildProjectName) -> %(_AppxUploadBundleResourceFileMaps.ResourcePack)" />
    <Message Importance="high" Condition="'$(AppxPackageSigningEnabled)' != 'true'" Text="$(MSBuildProjectName) -> %(_AppxUploadBundleResourceFileMaps.ResourcePack) (unsigned)" />

  </Target>

I replace the WinAppSdkSignAppxPackageBundle with WinAppSdkSignAppxPackage and guess what? UapAppxPackageBuildMode = CI or StoreUpload works now~

What a stupid mistake. Please fire the develop who wrote the code 🙂 and the QA Tester who did not actually run a demo by him/herself for even once 🤬

zhuxb711 avatar Sep 18 '25 04:09 zhuxb711

Excellent catch @zhuxb711 that fixes it. I also get very frustrated when things don't work as we expect them to, but I think we need to remember to direct our anger in the appropriate direction. I don't feel we should be upset with the people working to help us and keep things maintained - but rather the board members, chair and ceo etc. of a multi trillion Dollar company, who lay off employees and disrupt teams, keeping them understaffed, making it so much harder for them to do the job properly. It used to be "Developers, Developers, Developers" now it's "Shareholders, Shareholders, Shareholders". Thanks for finding the issue and have a great day.

MUJaCHe66 avatar Sep 18 '25 13:09 MUJaCHe66

Excellent catch @zhuxb711 that fixes it. I also get very frustrated when things don't work as we expect them to, but I think we need to remember to direct our anger in the appropriate direction. I don't feel we should be upset with the people working to help us and keep things maintained - but rather the board members, chair and ceo etc. of a multi trillion Dollar company, who lay off employees and disrupt teams, keeping them understaffed, making it so much harder for them to do the job properly. It used to be "Developers, Developers, Developers" now it's "Shareholders, Shareholders, Shareholders". Thanks for finding the issue and have a great day.

Sorry for the anger, but it indeed a stupid mistake, they did not run the build even once, anyone who run the build process would find this error. They just release it without any testing which is unacceptable at all.

zhuxb711 avatar Sep 18 '25 14:09 zhuxb711

@zhuxb711 Thanks very much for reporting this, and for suggesting a workaround for the community. We'll have this fixed shortly and an updated Microsoft.Windows.SDK.BuildTools.MSIX published, which you can add an app-level reference to. We'll include that update in future WinAppSDK releases.

Scottj1s avatar Oct 08 '25 18:10 Scottj1s

This is a blocker for our upcoming UWP -> WinUI migration release. @Scottj1s Do you have any ETA when fix for this issue will be released?

kristianpinke avatar Oct 08 '25 22:10 kristianpinke

@zhuxb711 Thanks very much for reporting this, and for suggesting a workaround for the community. We'll have this fixed shortly and an updated Microsoft.Windows.SDK.BuildTools.MSIX published, which you can add an app-level reference to. We'll include that update in future WinAppSDK releases.

Have this fixed shortly? When will you release the new Microsoft.Windows.SDK.BuildTools.MSIX ?

zhuxb711 avatar Oct 15 '25 09:10 zhuxb711

@Scottj1s Microsoft.Windows.SDK.BuildTools updated 11 days ago but Microsoft.Windows.SDK.BuildTools.MSIX isn't

zhuxb711 avatar Nov 04 '25 14:11 zhuxb711

@zhuxb711 What and where is that file I can open to change WinAppSdkSignAppxPackageBundle to WinAppSdkSignAppxPackage?

StevenABrown avatar Nov 06 '25 01:11 StevenABrown

@zhuxb711 What and where is that file I can open to change WinAppSdkSignAppxPackageBundle to WinAppSdkSignAppxPackage?

You could use the Github Action Script for workaround

# Must restore nuget first otherwise we would not be able to find the path of `microsoft.windows.sdk.buildtools.msix` in the next step

- name: Restore Nuget Packages
  shell: pwsh
  run: |
      msbuild "<Your Solution Path>" `
        /nr:false `
        /restore `
        /p:RestorePackagesConfig=true `
        /p:PreferredToolArchitecture="x64"

- name: Patch Code For WindowsAppSDK#5820
  shell: pwsh
  run: |
      $NuGetPackagesPath = $env:NUGET_PACKAGES ? $env:NUGET_PACKAGES :  $env:USERPROFILE ? (Join-Path $env:USERPROFILE ".nuget/packages") : (Join-Path $env:HOME ".nuget/packages")
      $TargetFilePath = Join-Path $NuGetPackagesPath "microsoft.windows.sdk.buildtools.msix/1.7.20250829.1/build/Microsoft.Windows.SDK.BuildTools.MSIX.Packaging.targets"

      if (Test-Path -Path $TargetFilePath) {
          $FileContent = Get-Content -Path $TargetFilePath -Raw -Encoding UTF8
          $ModifiedContent = $FileContent -Replace 'WinAppSdkSignAppxPackageBundle', 'WinAppSdkSignAppxPackage'
          
          if ($FileContent -eq $ModifiedContent) {
              Write-Host "No changes made. The target string was not found."
              Write-Host "Skipping code patching."
          } else {
              Set-Content -Path $TargetFilePath -Value $ModifiedContent -Encoding UTF8 -NoNewline
              Write-Host "Successfully replaced 'WinAppSdkSignAppxPackageBundle' with 'WinAppSdkSignAppxPackage'"
              Write-Host "File saved: $TargetFilePath"
          }
      } else {
          Write-Host "File not found: $TargetFilePath"
          Write-Host "Skipping code patching."
      }

# Build your project again with MSBuild as normal in the next step

zhuxb711 avatar Nov 06 '25 10:11 zhuxb711

Interesting, I just updated to WindowsAppSDK 1.8.251003001 yesterday in my app and saw the same error message when creating app packages for the Microsoft Store using Visual Studio. However, the build output was still created, and I was able to load those packages into App Center last night and see my updated app in the Store today. The error is seemingly erroneous in my case.

The "WinAppSdkSignAppxPackageBundle" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64" directory.

shanebweaver avatar Nov 09 '25 15:11 shanebweaver

@zhuxb711 Thanks very much for reporting this, and for suggesting a workaround for the community. We'll have this fixed shortly and an updated Microsoft.Windows.SDK.BuildTools.MSIX published, which you can add an app-level reference to. We'll include that update in future WinAppSDK releases.

Have this fixed shortly --> Microsoft.Windows.SDK.BuildTools.MSIX still not being updated for 3 months.

Image

What is going wrong? @Scottj1s

zhuxb711 avatar Nov 20 '25 02:11 zhuxb711