本文告诉大家如何使用 msbuild 命令行编译一个 UWP 程序
在有一些时候,如使用持续集成的时候就不能通过 VisualStudio 的方式编译 UWP 程序,需要使用命令行的方式编译。
尝试在本地从开始菜单打开开发命令提示符,或者从使用命令行调用本机的 VisualStudio 编译命令行
在 VisualStudio 在 C 盘安装就可以在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
找到 LunchDevCmd.bat 文件
运行之后可以看到下面界面
先进入项目所在的文件夹,也就是 sln 或 csproj 文件所在的文件夹,通过 msbuild 可以编译 sln 或编译 csproj 项目,推荐是编译 sln 的方式
在命令行跳转盘符,如从原来的C盘到 D 盘可以通过 盘符:
的方式
这样就可以跳转到 D 盘,在进入指定的文件夹,可以输入 cd 文件夹
的方式
如果自己输入很容易就输入错误,推荐输入 cd
然后在资源管理器打开文件夹,将地址栏的文件夹拖进命令行
在编译 UWP 之前,很重要的是清理原有的文件,假如文件都是通过 git 管理的,当前也不存在没有被跟踪的文件,可以使用下面的代码删除无关的文件,需要注意的是通过这个方式必须保证证书文件是被跟踪的
清理之后可以通过下面的代码还原 UWP 项目,还原这一步非常重要
但是默认欢迎的 ARM 的项目,很多时候需要的是 x86 的项目,可以通过下面的方式还原
如果要还原x64的程序,可以使用下面代码
现在就可以进行编译了,通过下面的代码进行编译
现在就可以编译 DEBUG 下的 x86 程序了
如果需要编译同时输出,可以尝试下面的代码。下面的 AppxPackageDir 是填写 AppxPackageDir 的文件夹路径,请将这个值修改为自己需要的。
如果需要输出可以上传的包,需要先在本地链接到应用商店,然后执行下面代码
如果是需要编译其他的解决方案,也就是当前的工作文件夹不在指定的项目文件夹,可以在 msbuild 后面添加解决方案的路径。注意这个路径需要使用 csproj
文件
如果是在服务器端编译,推荐先清理一下,然后再重新编译
清理的命令,请注意,如果需要带路径,对于清理命令需要加上 sln 文件
还原 Nuget 包
重新编译
如果是桌面转换制作的,此时命令行要求 AppxBundlePlatforms 的值是 neutral 而 Platform 要求 AnyCPU 才可以编译
例如在集成工具使用,实际大多数的集成工具默认都有配置 UWP 的编译,具体请看 win10 uwp 使用 Azure DevOps 自动构建 - lindexi - CSDN博客 win10 uwp 使用 AppCenter 自动构建 - lindexi - CSDN博客
在集成工具需要自己写编译的流程的时候,推荐下面的步骤
git clean -xdf
保证清理msbuild /t:clean
如果有了 git 的清理,实际也就不需要使用msbuild
的清理,只是防止有逗比上传了 obj 文件夹msbuild /t:restore
欢迎 nuget 包,注意添加自己的 nuget 网站,如果自己用了内部的 nuget 就需要自己添加msbuild /t:rebuild /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"
创建可以上传的文件,注意需要先链接应用商店,然后再将代码上传到 git 才可以创建出可以发到应用商店的文件。这时使用本地的测试证书也可以git clean
再次清理文件,如果自己的 AppxPackageDir 文件夹在工程所在的文件夹,这时就不要使用 git clean 了
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。