3

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

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

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

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

所以我按照这个 Windows 10 图标指南创建了以下.png所有图片,这些图片都放入了Assets文件夹中。我得到了这些:

在此处输入图像描述

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 种不同语言的资源?

编辑:在等待时,我尝试AppxManifest.xml用我展示的资产编译我的上面。但是makeappx.exe工具给了我以下错误:

MakeAppx:错误:错误信息:错误 C00CE015:应用程序清单验证错误:应用程序清单必须根据架构有效:第 22 行,第 27 列,原因:元素'{ http://schemas.microsoft上的属性'Square71x71Logo' .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 列,原因:为元素“ [local-name()='Applications']/ [local-name()='声明的文件名“Assets\AppNameMedTile.png”应用程序']/ [local-name()='VisualElements']" 包中不存在。如果此文件具有语言、比例、对比度等的多个变体或资源版本,请使用 /l 命令行选项禁用此验证。MakeAppx:错误:清单验证错误:第 23 行,第 27 列,原因:为元素“ [local-name()='Applications']/ [local-name()='声明的文件名“Assets\AppNameAppList.png”应用']/[local-name()='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"

构建带有很多警告的包。但是当我稍后安装它时,其中的所有图标似乎都是空白的。

一定有什么我在这里想念的吗?

4

1 回答 1

2

我看到两个主要问题:您在错误的位置定义平铺图像,并且您根本没有谈论 resources.pri 文件。

UAP 架构相当复杂,但文档也相当完善,因此请确保您尊重其要求。特别是uap:VisualElements 元素只有图像属性Square150x150LogoSquare44x44Logo. 如果您想定义其他尺寸,它们会进入子uap:DefaultTile 元素的属性中。请注意,您的uap:ShowOn 元素的属性包含一个不正确的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 不会的额外命名空间和功能'提供。)

于 2016-10-13T01:45:20.240 回答