带有Desktop Bridge软件包的UWP和MSbuild

时间:2018-08-17 09:19:58

标签: uwp msbuild build-automation

有人知道如何通过MSbuild工具使用Desktop Bridge(桌面扩展)软件包生成(.appxupload / .appxbundle)自动执行UWP吗?

我已经完成了following blog上的设置。

对于简单的UWP应用(不带Desktop Extension),我可以使用以下命令进行操作:

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

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

4 个答案:

答案 0 :(得分:1)

这是一个已知问题。有关团队一直在对此进行调查。作为某些变通办法,最明显的是避免建立多平台。

请记住,Centennial在ARM中不起作用,因此包含该平台是没有意义的。同样,为X86和X64进行构建以产生捆绑包也是有问题的。

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

答案 1 :(得分:1)

为了使用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在每个新版本中都使我们的生活变得轻松,并使文档变得如此有用和足智多谋。

答案 2 :(得分:0)

这里的经验相同,但是我设法通过分别构建x86和x64项目来绕过“找不到配方文件”错误,然后运行msbuild命令将两者打包。这是我的笔记:

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

  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。一个单独的上传捆绑包将在文件夹之外创建。

构建发行版本需要花费很多时间,但可以在命令行中使用。自动化,我们开始!

答案 3 :(得分:0)

解决方案是选择所有要构建的项目,但是手动选择包装项目作为要构建的主要项目:

msbuild uwp_build_test.sln / t:WapProjTemplate1:​​Rebuild / p:Configuration =发布/ p:UapAppxPackageBuildMode = StoreAndSideload / p:AppxBundlePlatforms =“ x86 | x64” / p:AppxBundle =始终/ p:AppxSymbolPackageEnabled = True AppxPackageSigningEnabled = True