带有 Desktop Bridge 包的 UWP 使用 MSbuild 构建自动化

UWP with Desktop Bridge package build automation with MSbuild

有谁知道如何使用 MSbuild 工具通过桌面桥(桌面扩展)包构建(.appxupload/.appxbundle)自动化 UWP?

我已经在 following blog.

上进行了设置

对于简单的 UWP 应用程序(没有桌面扩展),我可以使用以下命令:

msbuild UWP.sln /p:Configuration=Release;AppxBundle=Always;AppxBundlePlatforms=”x86|x64|ARM”;UapAppxPackageBuildMode=StoreUpload

然而,当我在 Package.wapproj 上尝试时,我遇到了很多错误。 例如,尽管 Package 项目有一个证书,但 UWP 项目也需要一个(为什么?),当我解决该问题时,msbuild 需要 bin/Debug 的 build.appxrecipe,尽管我正在构建 Release 等

这是一个已知问题。相关团队已展开调查。作为一些解决方法,最明显的是避免多平台构建。

请记住,Centennial 不适用于 ARM,因此包含该平台毫无意义。此外,为 X86 和 X64 构建以生成捆绑包在某种程度上是有问题的。

您可以尝试只为一个平台 X86 或 X64 构建并设置 AppxBundle=Never,最后构建解决方案而不是 wapproj。

同样的经历,但我设法通过分别构建 x86 和 x64 项目绕过 "Could not find a recipe file" 错误,然后 运行 msbuild 命令将两者打包。这是我的笔记:

  1. 因为我的解决方案有一个 Desktop Extension 项目、几个 c# 项目和几个测试项目,所以我必须在项目文件中指定 <AppxBundle>Always</AppxBundle><AppxBundle>Never</AppxBundle>,一个一个。

  2. 清洁 x86 和 x64。

  3. 首先构建 x86。 msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x86

  4. 构建 x64。 msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x64

  5. 运行 命令行中的这个 msbuild 命令:

    msbuild .\MyApp.sln /p:Configuration=Debug /p:AppxBundlePlatforms="x86|x64" /p:AppxPackageDir="C:\Develop\MyApp\AppPackages\" /p:UapAppxPackageBuildMode=StoreUpload

  6. 请注意,我必须在命令中添加 AppxPackageDir,否则它只会捆绑 x64,不会捆绑 x86。我还不知道为什么。

  7. 然后您将看到所有包文件夹都创建在 AppxPackageDir 下,包括 x64 和 x86。将在文件夹外创建一个上传包。

构建发布版本需要很长时间,但它可以在命令行中运行。自动化,我们开始了!

为了使用 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 开关的情况下分别构建每个平台,然后构建包,但每次我遇到配方错误时都没有任何效果。 他们有一个配方错误的未解决错误 - https://github.com/microsoft/msbuild/issues/4930

上面的方案终于在vs2019上搞定了。

感谢 Microsoft 通过每一个新版本让我们的生活变得轻松,并让文档变得如此有用和足智多谋。

解决方法是select所有项目都构建,但是把select打包项目作为主项目构建:

msbuild uwp_build_test.sln /t:WapProjTemplate1:Rebuild /p:Configuration=Release /p:UapAppxPackageBuildMode=StoreAndSideload /p:AppxBundlePlatforms=“x86|x64” /p:AppxBundle=Always /p:AppxSymbolPackageEnabled=真 /p:AppxPackageSigningEnabled=True