有人知道如何通过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等。
答案 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命令将两者打包。这是我的笔记:
因为我的解决方案有一个Desktop Extension项目,几个c#项目和几个测试项目,所以我必须在项目文件中一一指定<AppxBundle>Always</AppxBundle>
或<AppxBundle>Never</AppxBundle>
。< / p>
同时清洁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 :(得分: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