Search code examples
c#.net-coremauiwindows-store

Cannot publish .NET maui application to Windows store or sideload


I have a .NET Maui application that I want to publish to the Windows store. In the new .NET 8 template, I am seeing the following line for targeting windows

<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>

I cannot see any msBuildRuntimeType.

I have tried direct publishing and got the error:

Error: the specified RuntimeIdentifier 'win10-x64' is not recognized.
See https://aka.ms/netsdk1083 for more information.
C:\Program Files\dotnet\sdk\8.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets 90

I got to the link and followed it.

I added the

<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>

to my project.csprog:

<PropertyGroup>
    <TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
    <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
    <!-- <TargetFrameworks>$(TargetFrameworks);net8.0-tizen</TargetFrameworks> -->

    <!-- Note for MacCatalyst:
        The default runtime is maccatalyst-x64, except in Release config, in which case the default is maccatalyst-x64;maccatalyst-arm64.
        When specifying both architectures, use the plural <RuntimeIdentifiers> instead of the singular <RuntimeIdentifier>.
        The Mac App Store will NOT accept apps with ONLY maccatalyst-arm64 indicated;
        either BOTH runtimes must be indicated or ONLY macatalyst-x64. -->
    <!-- For example: <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> -->
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <OutputType>Exe</OutputType>
    <RootNamespace>AE</RootNamespace>
    <UseMaui>true</UseMaui>
    <SingleProject>true</SingleProject>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <!-- Display name -->
    <ApplicationTitle>AE</ApplicationTitle>

    <!-- App Identifier -->
    <ApplicationId>com.companyname.ae</ApplicationId>

    <!-- Versions -->
    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
    <ApplicationVersion>1</ApplicationVersion>

    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>
    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
    <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
    <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
    <GenerateAppInstallerFile>True</GenerateAppInstallerFile>
    <AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>78A9A7D249D1C892BF6CA01021D4CF662D989052</PackageCertificateThumbprint>
    <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
    <AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
    <GenerateTestArtifacts>True</GenerateTestArtifacts>
    <AppInstallerUri>C://</AppInstallerUri>
    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
    <!--Ends here-->
  </PropertyGroup>

And I also altered the MSIX-win10-x64.pubxml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishDir>bin\Release\net8.0-windows\publish\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <Platform>Any CPU</Platform>
    <Configuration>Release</Configuration>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <PublishSingleFile>false</PublishSingleFile>
    <PublishReadyToRun>false</PublishReadyToRun>
    <SelfContained>False</SelfContained>
    <PublishAppxPackage>true</PublishAppxPackage>
    <AppxPackageDir>bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\</AppxPackageDir>
  </PropertyGroup>
</Project>

Now I am getting a different set of errors:

Error: Assets file '[path]\AinsExaminations\AinsExaminations.Client\obj\project.assets.json' doesn't have a target for 'net8.0'. Ensure that restore has run and that you have included 'net8.0' in the TargetFrameworks for your project.
C:\Program Files\dotnet\sdk\8.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets 266

Which belongs to a class library that is a .NET Core 8 project.

With program.cs that looks like this:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\AinsExaminations.Domain\AinsExaminations.Domain.csproj" />
  </ItemGroup>

</Project>

and the first 15 lines of the class library's project.assets.json is

{
  "version": 3,
  "targets": {
    "net8.0": {
      "Azure.Core/1.35.0": {
        "type": "package",
        "dependencies": {
          "Microsoft.Bcl.AsyncInterfaces": "1.1.1",
          "System.Diagnostics.DiagnosticSource": "6.0.1",
          "System.Memory.Data": "1.0.2",
          "System.Numerics.Vectors": "4.5.0",
          "System.Text.Encodings.Web": "4.7.2",
          "System.Text.Json": "4.7.2",
          "System.Threading.Tasks.Extensions": "4.5.4"
        },

Please help


Solution

  • I never got to publish the windows application with the class library. I moved all the code from the class library to the Maui application.

    THe application is smaller and publishes well.