MSBuild 命令的简单使用

MSBuild 命令的简单使用

独立观察员 2022 年 7 月 7 日

d1c79d8b717444500f5b184f2979c25e.png

位置

在 VS 安装目录下,如:D:Microsoft Visual Studio2022EnterpriseMSBuildCurrentBin

7f60cddaf818705008bf83daefb2209a.png

命令

MSBuild 命令行参考 - MSBuild | Microsoft Docs(https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2022)

使用 MSBuild.exe 生成项目或解决方案文件时,可以包含几个开关来指定过程的各个方面。

每个开关都有两种形式:-switch 和 /switch。本文档仅介绍 -switch 形式。开关不区分大小写。如果从 Windows 命令提示符之外的 shell 运行 MSBuild,则开关的参数列表(用分号或逗号分隔)可能需要单引号或双引号,以确保将列表传递到 MSBuild,而不是由 shell 解释。

语法

MSBuild.exe [Switches] [ProjectFile]

参数

参数描述
ProjectFile在指定项目文件中生成目标。如果不指定项目文件,则 MSBuild 会在当前工作目录中搜索以 “proj” 结尾的文件扩展名并使用该文件。还可以为此参数指定 Visual Studio 解决方案文件。

开关

略(见原文)

示例

MSBuild.exe MyProject.proj -t:rebuild

问题

1、VS 中的生成前事件中参数未被识别的问题

项目中有如下生成事件,其中使用了 $(SolutionDir) 参数:

d3373d5d34f1cf66b3ff779faee94fe9.png

在使用 Jenkins 的 MSBuild 插件进行编译项目时发现该命令不能被识别:

8c8ca260a7b03f0151e1cab039594981.png

参考《[使用 MSBuild Tools 调用 csproj 项目文件发布网站时 $(SolutionDir) 宏参数值丢失为空的解决方案](https://www.cnblogs.com/VAllen/p/how-to-get-rid-of-solutiondir-when-building-vs-project-from-outside-visual.html)》可知,可以使用 -p 开关来指定参数的值,如下:

MSBuild D:JenkinsDataworkspaceSrcdesktop.sln -p:SolutionDir=D:JenkinsDataworkspaceSrc

-p 和 /p 应该是等价的。官网介绍如下:

ac44f4e3ef7bb128e12dfff9ecea7854.png

2、阻止输出警告信息

使用如下命令:

msbuild /p:WarningLevel=0

关于警告等级:

0 关闭所有的警告。

1 仅显示严重警告。

2 显示 1 级的警告以及某些不太严重的警告,例如有关隐藏类成员的警告。

3 显示级别 2 警告以及某些不太严重的警告,例如关于始终评估为 true 或 false 的表达式的警告。

4 默认值 显示所有 3 级警告和普通信息警告。

参考:《[在 MSBuild 编译项目时阻止输出所有的警告信息](https://blog.csdn.net/WPwalter/article/details/88796146/)

示例

使用 MSBuild 命令编译项目(: 注释的代码部分为 devenv 方式编译),各部分解释看脚本中的中文注释:

rem v20220705
ECHO OFF


: 以管理员身份运行
echo SetAdmin...
@echo off
>nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
"%temp%getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
echo SetAdmin Done.


: 杀死进程
taskkill /F /IM Main.Gui.exe


: 设置相关变量
set bg_dir=E:Buildexe
set src_dir=%~pd0Src
:Jenkins 工作空间路径为 % WORKSPACE%
:set src_dir=%WORKSPACE%Src
set desktop_dir=%src_dir%desktop


: 设置编译的环境变量
:set PATH="D:Microsoft Visual Studio2022EnterpriseCommon7IDE";%PATH%
set PATH="D:Microsoft Visual Studio2022EnterpriseMSBuildCurrentBin";%PATH%


: 执行编译
ECHO ***************************************** Build desktop *****************************************
:devenv %desktop_dir%desktop.sln /rebuild DEBUG
:devenv %desktop_dir%desktop.sln /build DEBUG /project %desktop_dir%UIMain.Gui.csproj
MSBuild %desktop_dir%UIMain.Gui.csproj -p:WarningLevel=0;SolutionDir=%desktop_dir%
ECHO ================================================desktop Done===========================================================
ECHO .
ECHO .


: 拷贝文件
ECHO Copy desktop
xcopy /Y /E /Q /I /exclude:%src_dir%exclude.txt %desktop_dir%Build %bg_dir%desktop


: 调用 Advanced Installer 打包
D:
cd D:Advanced Installer16.7binx86
advinst.exe /rebuild "E:BuildddPCR.aip"


pause

其中存放忽略规则的文件 exclude.txt 的内容为:

logs
.gitignore
.xml
.pdb
data

感谢阅读!

C#

C#10 新特性 [调用方参数表达式] 解决了我七年前的困惑

【分享】C# 字节帮助类 ByteHelper

C# 在自定义的控制台输出重定向类中整合调用方信息

C# 枚举转列表

.NET

Windows 服务 同时启动多个服务

PostSharp 中 AOP 功能的简单使用

.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号

将 .NET Framework 项目转换为 .NET Standard 项目

ASP.NET Core MVC 网站学习笔记

Unity 容器简单使用方法

Unity容器依赖注入之属性注入使用备忘

添加服务引用来使用WebService

其它

在 Windows 上搭建配置 Jenkins 然后编译打包 VS 项目

在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)

使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放

如何快速剥火腿肠皮?

使用 Floccus 插件和坚果云同步 Chrome 类浏览器书签

Docker Hub 使用初探

『独立观察员』个人观影 Ⅱ

VisualStudio 使用 DialogPage 存储配置信息

分页SQL语句

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值