带有 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 命令将两者打包。这是我的笔记:
因为我的解决方案有一个 Desktop Extension 项目、几个 c# 项目和几个测试项目,所以我必须在项目文件中指定 <AppxBundle>Always</AppxBundle>
或 <AppxBundle>Never</AppxBundle>
,一个一个。
清洁 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。将在文件夹外创建一个上传包。
构建发布版本需要很长时间,但它可以在命令行中运行。自动化,我们开始了!
为了使用 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
有谁知道如何使用 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 命令将两者打包。这是我的笔记:
因为我的解决方案有一个 Desktop Extension 项目、几个 c# 项目和几个测试项目,所以我必须在项目文件中指定
<AppxBundle>Always</AppxBundle>
或<AppxBundle>Never</AppxBundle>
,一个一个。清洁 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。将在文件夹外创建一个上传包。
构建发布版本需要很长时间,但它可以在命令行中运行。自动化,我们开始了!
为了使用 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