将桌面桥 UWP 应用与 Win32 应用正确打包

Posted

技术标签:

【中文标题】将桌面桥 UWP 应用与 Win32 应用正确打包【英文标题】:Properly package a Desktop Bridge UWP App with a Win32 App 【发布时间】:2018-07-20 01:46:37 【问题描述】:

我们已经有一个适用于 x86、x64 和 ARM 的 UWP 应用。关于商店认证一切都很好,所有测试都通过了,包括 .NET 本机编译。

我们想使用 Desktop Bridge(类似于此处指定的:https://blogs.msdn.microsoft.com/appconsult/2016/12/19/desktop-bridge-the-migrate-phase-invoking-a-win32-process-from-a-uwp-app/)向主 UWP(x86 , x64) 版本。 WPF 应用程序在一些本机 dll 上具有三个依赖项(x86 和 x64),它们与应用程序的其余部分打包在一起。

我们将 WPF.exe 应用程序和 dll 添加到现有的 UWP 包中(如上述博客文章中指定的 - 使用 xcopy)并为 HockeyApp 构建包。在本地和功能上,一切都适用于 x86 和 x64。上传到 ms 开发中心后,商店认证不幸失败并出现以下错误:

“包接受验证错误:使用桌面转换的应用程序 Bridge 和需要 .NET Native 框架的必须预编译 通过 .NET Native 工具链”

--但已经为 UWP Release x86、x64 启用了原生编译。

然后我们尝试创建一个 Windows 应用程序打包项目(如下所述:https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-packaging-dot-net#generate-packages-for-your-desktop-bridge-app)并将 UWP 应用和 WPF 作为依赖项添加。然后我们创建了一个新的应用清单和商店关联(不幸的是,似乎无法重用 UWP 应用中的现有清单)。我们为(x86 x64 Release)构建了应用商店包,并在本地成功测试了所有内容。然后我们将包上传到 win dev center 并再次遇到与之前相同的错误

“包接受验证错误:使用桌面转换的应用程序 Bridge 和需要 .NET Native 框架的必须预编译 通过 .NET Native 工具链”。

作为后续行动,我们从 Windows 应用程序打包项目中删除了 UWP 项目,并将 WPF 应用设置为入口点。然后我们构建了一个商店包,上传它,.NET 原生编译错误消失了。这很奇怪......

UWP 和 WPF 的组合(即使为 UWP 启用了本机编译)不知何故会导致此认证错误。我们感觉包装有问题。

我们真的希望这种组合发挥作用,否则我们将不得不退回到拥有两个单独的应用程序:一个纯 UWP 和一个需要单独安装的打包 WPF 配套应用程序。我们真的希望我们不必这样做。我不确定我们做错了什么,目前我已经没有想法了。

PS:我们也知道我们需要填写并提交一份关于受限能力的表格:完全信任。但在我们这样做之前,我们需要确保其他一切都很好。

【问题讨论】:

【参考方案1】:

2018 年 4 月 21 日更新 不再需要下面解释的解决方法,实际上商店将不再接受。正确打包带有 Win32 扩展的 UWP 应用程序的正确方法是使用新的 VS 打包项目,然后在 VS 中创建该项目的商店包。详细信息在此博客文章中,请参阅示例 #3 以了解此特定情况: https://blogs.windows.com/buildingapps/2017/12/04/extend-desktop-application-windows-10-features-using-new-visual-studio-application-packaging-project/#uvfV1r7937WrSkX2.97

下面是过时的答案

对于包含 UWP 和桌面 .NET 二进制文件的包,您在应用商店提取过程中遇到了一个已知缺陷。商店团队正在积极解决这个问题,因此它将自动处理这种类型的提交。同时,您可以执行以下操作来解锁:

按如下方式手动创建 your.appxupload(为清楚起见,请参阅下面的屏幕截图):

    转到 AppPackage 的输出文件夹 选择 .appxsym 文件和 .appxbundle 文件 从这些文件中创建一个新的 .zip 文件 将 .zip 文件重命名为 .appxupload 使用新的 .appxupload 文件重新提交到应用商店

【讨论】:

谢谢 Stefan,成功了 ;)。验证通过了我们第一个解决方案的 .NET 本机测试,我们使用 xcopy 复制 win32 文件。我们现在可以填写完整信任许可表格。 当我尝试此操作时,我从商店收到以下错误:“您无法提交预编译的 .NET Native 包。请上传商店 appxupload 文件并重试。”。我得到一个网页链接,解释如何以正常方式打包应用程序。在获得完全信任权限之前,可能会出现此错误,但我无法在任何地方找到它。 @WimBokkers:商店政策最近发生了变化,现在您应该使用新的 VS 打包项目(又名 wapproj)来制作商店接受的桌面桥包。 没错。我将使用此更新编辑答案。 @StefanWickMSFT,据我所知,打包项目有它自己的清单和资产,我们是否需要从 UWP 项目复制资产/清单并将它们复制到打包项目中?跨度>

以上是关于将桌面桥 UWP 应用与 Win32 应用正确打包的主要内容,如果未能解决你的问题,请参考以下文章

关闭 UWP 应用后,具有完全信任进程的 Windows 应用程序打包项目保持运行

WPF 引用 UWP 控件 不打包为 MSIX 分发的方法

如果我无法使我的应用程序与Windows应用商店兼容,该怎么办?

UWP项目是否可以包含没有打包项目的桌面exe?

使用 Win32 和 UWP/Xbox 平台支持管理 C++ 应用程序的最佳实践?

UWP C# 管道客户端无法连接到 Win32 C++ 管道服务器