如何在AppxManifest.xml文件中正确构建UWP应用程序图标,以便使用Desktop Bridge转换Win32应用程序(Project Centennial)

时间:2016-10-07 06:16:39

标签: winapi uwp windows-10 project-centennial desktop-bridge

我正在尝试使用Project Centennial转换器(即桌面桥)将我的Win32应用转换为UWP应用。

转换应用后,我需要调整AppxManifest.xml文件以确保以下内容:

  • 正确配置了所有图标格式。

  • 我正确指定了以下应用资源:英语(美国),德语,法语和俄语。

因此,我按照this Windows 10 icon guide创建了以下.png张图片,这些图片全部放入Assets文件夹中。我得到了这些:

enter image description here

我的AppxManifest.xml的结构如此:

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10">
  <Identity Name="MyApp.Name" ProcessorArchitecture="x86" Publisher="CN=My Name, O=My Name, STREET=&quot;Street Address&quot;, L=City, S=State, PostalCode=12345, C=US" Version="1.2.3.4" />
  <Properties>
    <DisplayName>MyApp.Name</DisplayName>
    <PublisherDisplayName>PublisherName</PublisherDisplayName>
    <Logo>Assets\StoreLogo-50x50.png</Logo>
  </Properties>
  <Resources>
    <Resource Language="en-us" />
    <Resource Language="de-DE" />
    <Resource Language="fr-FR" />
    <Resource Language="ru-RU" />
  </Resources>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14342.0" MaxVersionTested="10.0.14342.0" />
  </Dependencies>
  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
  <Applications>
    <Application Id="MyApp.Name" Executable="VFS\Users\ContainerAdministrator\AppData\Local\PublisherName\App Name\RunFile.exe" EntryPoint="Windows.FullTrustApplication">
      <uap:VisualElements DisplayName="My App Name" Description="My app does this ... and this ..." 
                          BackgroundColor="#aabbcc" 
                          Square71x71Logo="Assets\AppNameSmallTile.png"
                          Square150x150Logo="Assets\AppNameMedTile.png"
                          Square310x150Logo="Assets\AppNameWideTile.png"
                          Square310x310Logo="Assets\AppNameLargeTile.png"
                          Square44x44Logo="Assets\AppNameAppList.png"
                          >
        <uap:DefaultTile>
          <uap:ShowNameOnTiles>
            <uap:ShowOn Tile="square150x150Logo" />
            <uap:ShowOn Tile="Square310x150Logo" />
            <uap:ShowOn Tile="Square310x310Logo" />
          </uap:ShowNameOnTiles>
        </uap:DefaultTile>
      </uap:VisualElements>
      <Extensions />
    </Application>
  </Applications>
</Package>

有人可以回答这些问题:

  1. 我对指定正确尺寸和缩放的图标感到困惑。我做得对吗?

  2. 我是否还要为Assets\StoreLogo-50x50.png图标指定缩放比例?

  3. 最后,我是否正确指定了4种不同语言的资源?

  4. 编辑:在等待的过程中,我尝试使用我展示的资源编译上面的AppxManifest.xml。但makeappx.exe工具给出了以下错误:

      

    MakeAppx:错误:错误信息:错误C00CE015:应用程序清单验证   错误:应用清单必须按照架构有效:第22行,列   27,原因:元素上的属性'Square71x71Logo'   '{http://schemas.microsoft.com/appx/manifest/uap/windows10} VisualElements'   未在DTD / Schema中定义。

    显然不喜欢以下图标尺寸:

    Square71x71Logo
    Square310x150Logo
    Square310x310Logo
    

    但是,即使我从AppxManifest.xml删除上面的图标大小,当我尝试使用以下命令打包它时:

    "C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe" pack /d "path-to-folder-to-pack" /p "path-to\MyAppxPackage.appx"
    

    关于命名资产以进行扩展,我收到以下错误:

      

    MakeAppx:错误:清单验证错误:第22行,第27列,   原因:为元素声明了文件名“Assets \ AppNameMedTile.png”   “ [本地名称()= '应用'] / [本地名称()= '应用'] / [本地名称()= 'VisualElements']”   包中不存在。如果此文件有多个变体或   语言,比例,对比等资源版本,使用/ l   命令行选项以禁用此验证。 MakeAppx:错误:   清单验证错误:第23行,第27列,原因:文件名   为元素声明的“Assets \ AppNameAppList.png”   “ [本地名称()= '应用'] / [本地名称()= '应用'] / [本地名称()= 'VisualElements']”   包中不存在。如果此文件有多个变体或   语言,比例,对比等资源版本,使用/ l   命令行选项以禁用此验证。 MakeAppx:错误:   包创建失败。 MakeAppx:错误:0x80080204 - 指定的   包格式无效:包清单无效。

    使用建议的/l命令:

    "C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe" pack /l /d "path-to-folder-to-pack" /p "path-to\MyAppxPackage.appx"
    

    使用大量警告构建包。但是当我稍后安装它时,它中的所有图标似乎都是空白的。

    我必须在这里找到一些东西吗?

1 个答案:

答案 0 :(得分:2)

我看到两个主要问题:你在错误的地方定义了平铺图像,而你根本没有谈论一个resources.pri文件。

UAP架构非常复杂,但也有相当详细的文档记录,因此请确保遵守其要求。特别是,uap:VisualElements element仅包含图片属性Square150x150LogoSquare44x44Logo。如果要定义其他尺寸,则会在子uap:DefaultTile element上输入属性。请注意,您的uap:ShowOn elements'属性包含的Square310x150Logo不正确,应该是wide310x150Logo

排除后,makeappx应该使用原始命令行成功,即没有额外的/l参数。但是,这还不足以让您的备用DPI图像显示出来。为此,您需要创建resources.pri文件。您可以使用makepri.exe手动创建模板priconfig.xml,更新它,然后再次调用makepri以从中构建resources.pri。

或者,使用一个工具,为您创建一个包含resources.pri的应用包(例如Visual Studio),然后解压缩resources.pri并将其添加到您的包中。只需确保您在包中使用的位置与工具创建的包中的位置匹配,因为相对路径存储在resources.pri文件中。 (作为奖励,您可以查看这个创建的AppxManifest.xml,以验证第一部分的结构是否正确。只是不要忘记使用桌面桥的应用程序将具有Visual Studio赢得的其他命名空间和功能'提议。)