我正在创建一个使用新的自定义页面布局的 Microsoft Band 应用程序。我正在使用 Microsoft Visual Studio Community 2013 更新 4。我一切正常,并且该应用程序在我的测试环境中运行良好(即当我将应用程序从我的计算机推送到我的手机时)。但是,一旦我创建了商店版本并创建了一个 beta 应用程序包并从商店下载它并尝试通过应用程序安装 Band 磁贴,我得到一个例外。我再说一遍,当我通过应用程序安装 Band 磁贴时,当从我的开发环境推送应用程序时,我没有遇到异常,但是当使用相同的代码创建应用程序包并且重复该过程时,我会这样做,但是新下载的二进制文件。
乐队磁贴已成功添加到我的乐队,但我的乐队应用程序只有我尝试添加的 5 个自定义页面布局中的第一个。经过多次试验和错误(上传到 App Store 的数十个 beta 应用程序包),我知道这一点。
我已经邀请了其他 beta 测试人员,他们都收到了同样的例外情况。
这是异常详细信息
Microsoft.Band.BandIOException:
Exception of type 'System.Resources.MissingManifestResourceException' was thrown. ---> System.Resources.MissingManifestResourceException:
Exception of type 'System.Resources.MissingManifestResourceException' was thrown.
at
System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
at
Microsoft.Band.BandResources.get_CommandStatusError()
at
Microsoft.Band.BandClient.CheckStatus(CargoStatus status, CommandStatusHandling statusHandling)
at
Microsoft.Band.BandClient.DynamicPageLayoutSetLayout(Guid appId, UInt32 layoutIndex, PageLayout layout)
--- End of inner exception stack trace ---
at
Microsoft.Band.BandClient.DynamicPageLayoutSetLayout(Guid appId, UInt32 layoutIndex, PageLayout layout)
at
Microsoft.Band.BandClient.AddTileOutsideSync(BandTile tile)
at
Microsoft.Band.BandClient.<>c__DisplayClass9b.<AddTile>b__9a()
at
Microsoft.Band.BandClient.RunUsingSynchronizedFirmwareUI(Action insideSync, Action afterSync)
at
Microsoft.Band.BandClient.AddTile(BandTile tile, Guid applicationId, IReadOnlyList`1 installedTiles)
at
Microsoft.Band.BandClient.<>c__DisplayClass6f.<<AddTileAsync>b_6c>d__71.MoveNext()
-- End of stack tracke from previous location where exception was thrown ---
经过多次反复试验,我将问题简化为以下代码。当从 App Store 检索二进制文件并执行该方法时,它会产生错误。但是,当通过 Microsoft Visual Studio 2013 环境从我的本地计算机推送二进制文件并执行该方法时,它不会产生任何错误。此外,如果我删除添加自定义页面布局的行并将我的应用程序发送到商店并进行测试,则不会引发异常。
public async Task CreateBandTile() {
try
{
Guid tileId = new Guid("2D3A78E2-84BB-4E56-AFEB-B160B2433E20");
IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]);
BandTile myTile = new BandTile(tileId)
{
Name = "My Band Tile",
TileIcon = await LoadIcon("ms-appx:///Assets/IconLarge.png"),
SmallIcon = await LoadIcon("ms-appx:///Assets/IconSmall.png"),
IsBadgingEnabled = false
};
FlowPanel page = new FlowPanel(
new TextBlock()
{
ElementId = 1,
Rect = new PageRect(0, 0, 100, 30),
Font = TextBlockFont.Small
}
)
{
Rect = new PageRect(0, 0, 245, 30)
};
// *** If I remove the following line, no exception is thrown ***
myTile.PageLayouts.Add(new PageLayout(page));
// Remove the Tile from the Band, if present.
await bandClient.TileManager.RemoveTileAsync(tileId);
// Create the Tile on the Band.
await bandClient.TileManager.AddTileAsync(myTile);
}
catch (Exception)
{
throw;
}
}
我在这里做错了什么?也许我是第一个通过使用自定义布局的 MS 应用商店发送应用的开发人员。我觉得这里有一个错误,这是微软的问题。