原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序

版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问。如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details/84252865

本文告诉大家如何使用 msbuild 命令行编译一个 UWP 程序


在有一些时候,如使用持续集成的时候就不能通过 VisualStudio 的方式编译 UWP 程序,需要使用命令行的方式编译。

尝试在本地从开始菜单打开开发命令提示符,或者从使用命令行调用本机的 VisualStudio 编译命令行

cmd> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\LaunchDevCmd.bat"

在 VisualStudio 在 C 盘安装就可以在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\ 找到 LunchDevCmd.bat 文件

运行之后可以看到下面界面

> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\LaunchDevCmd.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.8.5
** Copyright (c) 2017 Microsoft Corporation
********************************************************************** C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>

先进入项目所在的文件夹,也就是 sln 或 csproj 文件所在的文件夹,通过 msbuild 可以编译 sln 或编译 csproj 项目,推荐是编译 sln 的方式

在命令行跳转盘符,如从原来的C盘到 D 盘可以通过 盘符: 的方式

cmd> D:

这样就可以跳转到 D 盘,在进入指定的文件夹,可以输入 cd 文件夹 的方式

如果自己输入很容易就输入错误,推荐输入 cd 然后在资源管理器打开文件夹,将地址栏的文件夹拖进命令行

在编译 UWP 之前,很重要的是清理原有的文件,假如文件都是通过 git 管理的,当前也不存在没有被跟踪的文件,可以使用下面的代码删除无关的文件,需要注意的是通过这个方式必须保证证书文件是被跟踪的

cmd> git clean -xdf

清理之后可以通过下面的代码还原 UWP 项目,还原这一步非常重要

cmd> msbuild /t:restore

但是默认欢迎的 ARM 的项目,很多时候需要的是 x86 的项目,可以通过下面的方式还原

cmd> msbuild /t:restore /p:Platform=x86

如果要还原x64的程序,可以使用下面代码

cmd> msbuild /t:restore /p:Platform=x64

现在就可以进行编译了,通过下面的代码进行编译

cmd> msbuild /p:Platform=x86

现在就可以编译 DEBUG 下的 x86 程序了

如果需要编译同时输出,可以尝试下面的代码。下面的 AppxPackageDir 是填写 AppxPackageDir 的文件夹路径,请将这个值修改为自己需要的。

/p:AppxBundlePlatforms="x86|x64|ARM" /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:platform="x86" /p:configuration="release" /p:VisualStudioVersion="15.0"

如果需要输出可以上传的包,需要先在本地链接到应用商店,然后执行下面代码

msbuild /t:restore /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

如果是需要编译其他的解决方案,也就是当前的工作文件夹不在指定的项目文件夹,可以在 msbuild 后面添加解决方案的路径。注意这个路径需要使用 csproj 文件

msbuild "D:\lindexi\UWP\Foo.csproj" /t:restore /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

如果是在服务器端编译,推荐先清理一下,然后再重新编译

清理的命令,请注意,如果需要带路径,对于清理命令需要加上 sln 文件

msbuild  /t:clean

// 带路径
msbuild "E:\lindexi\UWP\Foo.sln" /t:clean

还原 Nuget 包

msbuild /t:restore 

// 带路径
msbuild "E:\lindexi\UWP\Foo.sln" /t:restore

重新编译

msbuild "D:\lindexi\UWP\Foo.csproj" /t:rebuild /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

例如在集成工具使用,实际大多数的集成工具默认都有配置 UWP 的编译,具体请看 win10 uwp 使用 Azure DevOps 自动构建 - lindexi - CSDN博客 win10 uwp 使用 AppCenter 自动构建 - lindexi - CSDN博客

在集成工具需要自己写编译的流程的时候,推荐下面的步骤

  1. git clean -xdf 保证清理
  2. msbuild /t:clean 如果有了 git 的清理,实际也就不需要使用 msbuild 的清理,只是防止有逗比上传了 obj 文件夹
  3. msbuild /t:restore 欢迎 nuget 包,注意添加自己的 nuget 网站,如果自己用了内部的 nuget 就需要自己添加
  4. 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 才可以创建出可以发到应用商店的文件。这时使用本地的测试证书也可以
  5. git clean 再次清理文件,如果自己的 AppxPackageDir 文件夹在工程所在的文件夹,这时就不要使用 git clean 了


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

win10 uwp 使用 msbuild 命令行编译 UWP 程序的更多相关文章

  1. 使用命令行编译Qt程序

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  2. 如何用命令行编译c++程序

    作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,而不知道如何直接通过编译器编译程序的话.虽然说也没啥大不了的,但是如果掌握了手动编译的技能,那肯定会是一种炫技般的存在.从客观的角度来讲,一方面, ...

  3. 【Qt】命令行编译Qt程序(nmake)【转】

    简述 前两节讲解了如何在Visual Studio和Qt Creator中搭建Qt开发环境,并分享了我们第一个小程序-Hello World. 下面分享如何使用命令行来编译Qt程序.当然,MSVC和M ...

  4. 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”

    今天复习Java基础知识时,使用cmd命令窗口进行编译Java文件发现了如下问题: 网上有很多的解决方法,和问题出现的讨论,以下方法是解决我出现这个问题方式. 解决方式: 重点是圈住的部分. 下面是我 ...

  5. 命令行编译C++程序

        使用命令行来编译C++程序,我们可以有两种方法:     方法一:     1. 依次打开开始程序->Visual Studio 2010 –>Visual Studio tool ...

  6. java 命令行 编译 运行程序

    学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样能够熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lk ...

  7. 怎样用命令行编译C#程序

    1. 把程序拷贝至记事本 2.另存为*cs格式 3.找到VS2015提供的命令提示 4.要把命令行指向程序所在的目录(可以有个小软件) 如果在其他的盘符,先敲D:,然后再cd 5.输入csc hell ...

  8. 命令行编译C程序

    1 准备工作 下载mingw-get-setup.exe并且安装  参考 http://www.jb51.net/softjc/159871.html 环境变量更新: PATH .;C:\MinGW\ ...

  9. 终端命令行编译运行C#程序HelloWorld

    终端命令行编译运行C#程序HelloWorld 今天忽然有人问我,刚学习java程序的时候,一般老师都会建议我们从配置环境变量开始从命令行编译运行程序,那么学习c#的时候基本是直接安装visual s ...

随机推荐

  1. 【例题5-5 UVA 12096 】The SetStack Computer

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用set来解决这个问题. 考虑如何表示 { {{}} }这个集合 我们可以把{}这个集合和一个数字映射->1 然后把1加入到某 ...

  2. 【POJ 3415】Common Substrings

    [链接]h在这里写链接 [题意]     求两个串的长度大于等于k的公共子串个数.     相同的重复计数. [题解]     先把两个字符串用一个分隔符分开.最好比出现的字符都大的一个数字.    ...

  3. 23、uevent/hotplug热拔插机制

    (class_device_create的目的是为了让mdev根据它注册的信息来创建设备节点) class_device_create class_device_register class_devi ...

  4. [Redis专辑][1]ubuntu12.04下安装php-redis的方法和步骤

    首次公布路径:phpredis的安装 非常久非常久没有写博文了,好多博文都没有整理完成,今天才抽时间整理完这一篇博文,希望能对大家有一定的帮助 首先对redis做个简单的介绍: Redis 是全然开源 ...

  5. 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包

    前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...

  6. 【搜索引擎Jediael开发笔记】v0.1完整代码 2014-05-26 15:17 463人阅读 评论(0) 收藏

    详细代码请见 E:\Project\[重要]归档代码\SearchEngine归档代码 或 https://code.csdn.net/jediael_lu/jediael/tree/10991c83 ...

  7. Linux 常用性能工具

    Linux 常用性能工具简介. 一.wget 文件下载 使用wget下载单个文件:wget URL 下载并以不同的文件名保存:wget -O wordpress.zip URL wget限速下载:wg ...

  8. 【cocos2dx 3.2】瓦片地图制作

    使用Tiled编辑地图 每个图层仅仅能放一种瓦片 瓦片的大小最好是32*32的倍数 对象层里面设置路径的坐标 主程序中获取对象层中的坐标,做对应的操作 设置口袋精灵类: Monster.h #incl ...

  9. MySQL搜索:WHERE

    MySQL指定搜索条件进行搜索能够使用where条件. 在SELECT语句中.数据依据WHERE子语句中指定的条件进行过滤,WHERE子语句在表名之后给出. product表例如以下: a 查找价格等 ...

  10. cat /proc/cpuinfo 引发的思考--CPU 物理封装-物理核心-逻辑核心-超线程之间关系

    CPU的物理封装,一个物理封装使用独立的一个CPU物理插槽,共享电源和风扇: CPU物理核心:在一个物理封装中封装了多个独立CPU核心,每一个CPU核心都有自己独立的完整硬件单元. CPU逻辑核心:一 ...