2019-7-20-win10-uwp-使用-msbuild-命令行编译-UWP-程序
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp 使用 msbuild 命令行编译 UWP 程序
|
lindexi
|
2019-07-20 21:56:24 +0800
|
2018-10-21 16:15:32 +0800
|
UWP VisualStudio msbuild
|
本文告诉大家如何使用 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博客
在集成工具需要自己写编译的流程的时候,推荐下面的步骤
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 了
2019-7-20-win10-uwp-使用-msbuild-命令行编译-UWP-程序的更多相关文章
- win10 uwp 使用 msbuild 命令行编译 UWP 程序
原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...
- 使用命令行编译Qt程序
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
- 如何用命令行编译c++程序
作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,而不知道如何直接通过编译器编译程序的话.虽然说也没啥大不了的,但是如果掌握了手动编译的技能,那肯定会是一种炫技般的存在.从客观的角度来讲,一方面, ...
- 【Qt】命令行编译Qt程序(nmake)【转】
简述 前两节讲解了如何在Visual Studio和Qt Creator中搭建Qt开发环境,并分享了我们第一个小程序-Hello World. 下面分享如何使用命令行来编译Qt程序.当然,MSVC和M ...
- 怎样用命令行编译C#程序
1. 把程序拷贝至记事本 2.另存为*cs格式 3.找到VS2015提供的命令提示 4.要把命令行指向程序所在的目录(可以有个小软件) 如果在其他的盘符,先敲D:,然后再cd 5.输入csc hell ...
- 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”
今天复习Java基础知识时,使用cmd命令窗口进行编译Java文件发现了如下问题: 网上有很多的解决方法,和问题出现的讨论,以下方法是解决我出现这个问题方式. 解决方式: 重点是圈住的部分. 下面是我 ...
- 命令行编译C++程序
使用命令行来编译C++程序,我们可以有两种方法: 方法一: 1. 依次打开开始程序->Visual Studio 2010 –>Visual Studio tool ...
- java 命令行 编译 运行程序
学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样能够熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lk ...
- 命令行编译C程序
1 准备工作 下载mingw-get-setup.exe并且安装 参考 http://www.jb51.net/softjc/159871.html 环境变量更新: PATH .;C:\MinGW\ ...
- 终端命令行编译运行C#程序HelloWorld
终端命令行编译运行C#程序HelloWorld 今天忽然有人问我,刚学习java程序的时候,一般老师都会建议我们从配置环境变量开始从命令行编译运行程序,那么学习c#的时候基本是直接安装visual s ...
随机推荐
- copyTo和clone的区别/制作mask的fillpoly函数(有问题)
OpenCV中mat::copyto( )函数使用方法 OpenCV的fillPoly函数 使用OpenCV库进行图像处理时,经常会用到clone和copyTo函数,这里对两个函数进行介绍. copy ...
- div 无缝滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org ...
- 通过游戏学python 3.6 第一季 第四章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释 可复制直接使用 娱乐 可封装 函数
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释 #!usr/bin/env python #-*-coding:utf-8-*- #QQ124111294 import ...
- 字符串常用方法(转载--https://www.cnblogs.com/ABook/p/5527341.html)
一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...
- js 实现继承
我们现在要做的一件事情是像其他语言的面向对象一下实现继承多态 具体要求如下: 一个 Father 构造函数,一个 Child 构造函数,其中改写 Father中的部分参数, new Child() 表 ...
- C#多线程之间事件通知
我有两个线程,线程1接受网络数据,存到队列;线程2取队列,进行各种复杂的处理然后绘制到界面上;想让线程1有数据了通知线程2,线程2再取队列,因为不通知的话,线程2一直在while循环检索队列时候有东西 ...
- Hdu 1068 最小路径覆盖
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- c#通过app.manifest使程序以管理员身份运行
通常我们使用c#编写的程序不会弹出这个提示,也就无法以管理员身分运行.微软的操作系统使用微软的产品方法当然是有的,通过app.manifest配置可以使程序打开的时候,弹出UAC提示需要得到允许才可以 ...
- python第一天 :计算机基础(一)
1.什么是编程语言 答:人类与计算机交流的介质 2.什么是编程 答:利用编程语言控制计算机解决问题 3.为什么要编程 答:可以控制计算机做事,提高生产生活效率 4.计算机的五大组成部分分别有什么作用? ...
- 关于如何在部署环境修改process.env & 本地测试
前言 最近在搞一些监控的东西, 需要根据不同的环境上报到不同的地址,中间遇到了一些问题,在这里简单总结分享下. 关于process.env 假如你对process.env 相关的概念还不熟悉, 请移步 ...