使用MSbuild自动构建UWP桌面桥接包

7
有人知道如何使用MSbuild工具自动化UWP与桌面桥接(桌面扩展)包的构建(.appxupload/.appxbundle)吗?我已经按照这篇博客中的设置进行了操作。 对于简单的UWP应用程序(没有桌面扩展),我可以使用以下命令完成此操作:
msbuild UWP.sln /p:Configuration=Release;AppxBundle=Always;AppxBundlePlatforms=”x86|x64|ARM”;UapAppxPackageBuildMode=StoreUpload

然而,当我在Package.wapproj上尝试时,出现了许多错误。例如,虽然Package项目有一个证书,但UWP项目也需要一个(为什么?),即使我解决了这个问题,msbuild也需要从bin/Debug获取build.appxrecipe,尽管我正在构建发布版本等。


请发布错误信息。 - Xie Steven
1
@XavierXie-MSFT 我和 OP 有同样的问题,我会帮忙尽快解决。我可以在一个只有 UWP 和 Packaging 项目的新解决方案中重现此问题,然后通过 "msbuild /p:Configuration=Release /p:Platform=x86" 构建打包项目 --- 错误: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\DesktopBridge\Microsoft.DesktopBridge.targets(350,5): error : Could not find a recipe file for the referenced UWP application at '[..]\PackagingTest\PackagingTest.UWP\bin\Debug\PackagingTest.UWP. build.appxrecipe'. Please build the project. - xabre
4个回答

5
同样的经历,但我设法通过分别构建x86和x64项目来绕过“找不到配方文件”错误,然后运行msbuild命令来打包两者。以下是我的注意事项:
- 因为我的解决方案有一个桌面扩展项目、几个C#项目和一些测试项目,所以我必须在每个项目文件中指定`Always`或`Never`。 - 先清除x86和x64。 - 首先构建x86。`msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x86` - 构建x64。`msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x64` - 在命令行中运行此msbuild命令:`msbuild .\MyApp.sln /p:Configuration=Debug /p:AppxBundlePlatforms="x86|x64" /p:AppxPackageDir="C:\Develop\MyApp\AppPackages\" /p:UapAppxPackageBuildMode=StoreUpload` - 注意,在命令中添加了`AppxPackageDir`,否则它只会捆绑x64,而不是x86。我还不知道为什么。 - 然后,您将看到所有捆绑文件夹都在`AppxPackageDir`下创建,包括x64和x86。单个上传捆绑将在文件夹外创建。 构建发布版本需要很长时间,但在命令行中可以使用。自动化,我们出发吧!

3

为了在使用msbuild构建时使用VS2017,我成功的命令是:

\path\to\msbuild.exe UWP.sln ^
    /m /p:platform=x86 /p:platform=x64 /p:platform=arm ^
    /p:Configuration=Release ^
    /p:AppxBundle=Always ^
    /p:AppxBundlePlatforms="x64|x86|ARM" ^
    /p:UapAppxPackageBuildMode=StoreUpload ^
    /Consoleloggerparameters:verbosity=minimal

但是为了使用VS2019进行构建,经历了很多压力、流血和咒骂后,以下步骤可行:

首先,更改Package.wapproj的内容如下:

<AppxBundlePlatforms>x86|x64|arm</AppxBundlePlatforms>
<UapAppxPackageBuildMode>StoreAndSideload</UapAppxPackageBuildMode>

然后只需要运行单个msbuild命令:

\path\to\msbuild.exe UWP.sln /m ^
    /p:Configuration=Release ^
    /p:platform=x64 /p:platform=x86 /p:platform=arm ^
    /Consoleloggerparameters:verbosity=minimal ^
    /Fileloggerparameters:verbosity=quiet ^
    -nodeReuse:false

这个工具将所有的平台和包的侧载和上传全部完成。

我不得不关闭文件记录器,因为在多处理器构建中,有多个ilc.exe进程的竞争条件,导致它说ilclog.csv无法打开,因为它正在被另一个进程使用。愚蠢。

我尝试了每个平台分别构建,没有使用/m开关,然后构建包,但是每次都出现配方错误。 他们对于配方错误有一个开放的bug - https://github.com/microsoft/msbuild/issues/4930

以上解决方案最终成功适用于vs2019。

感谢微软每次发布新版本时使我们的生活更加轻松,并提供如此有用和丰富的文档。


1
这是一个已知问题。相关团队一直在调查中。其中一些解决方法,最明显的是避免多平台构建。
请记住,Centennial不适用于ARM,因此包含该平台没有意义。同时为X86和X64构建以生成捆绑包也存在问题。
您可以尝试仅为一个平台X86或X64构建,并设置AppxBundle=Never,最后构建解决方案而不是wapproj。

1
那并不是一个可接受的解决方案,因为商店上传会返回以下错误: “此应用程序的先前提交已发布为 Windows 10 appxbundle。后续提交必须继续包含 Windows 10 appxbundle。” - xabre
1
你能删除之前的提交吗?另一个选项是创建一个 Flight,这将是一个新的提交,然后进行推广。请记住,即使您只针对一个平台,也可以生成 appxbundle。 - Xie Steven
1
构建解决方案(而不是wapproj)仅适用于一个平台,但由于此原因,我们不得不放弃x64支持。请在MS端修复此问题后立即跟进此帖子,以便我们可以再次支持两种架构。 - xabre

0
解决方案是选择所有项目进行构建,但手动选择打包项目作为主要构建项目:
msbuild uwp_build_test.sln /t:WapProjTemplate1:Rebuild /p:Configuration=Release /p:UapAppxPackageBuildMode=StoreAndSideload /p:AppxBundlePlatforms="x86|x64" /p:AppxBundle=Always /p:AppxSymbolPackageEnabled=True /p:AppxPackageSigningEnabled=True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接