MSBuild 命令的简单使用

时间:2022-10-06 22:59:54


MSBuild 命令的简单使用

独立观察员 2022 年 7 月 7 日

MSBuild 命令的简单使用

位置

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

MSBuild 命令的简单使用

命令

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) 参数:

MSBuild 命令的简单使用

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

MSBuild 命令的简单使用

参考《[使用 MSBuild Tools 调用 csproj 项目文件发布网站时 $(SolutionDir) 宏参数值丢失为空的解决方案]》可知,可以使用 -p 开关来指定参数的值,如下:


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

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

MSBuild 命令的简单使用

2、阻止输出警告信息

使用如下命令:

msbuild /p:WarningLevel=0

关于警告等级:

​0​​ 关闭所有的警告。

​1​​ 仅显示严重警告。

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

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

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

参考:《[在 MSBuild 编译项目时阻止输出所有的警告信息]

示例

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

rem v20220705ECHO OFF
: 以管理员身份运行echo SetAdmin...@echo off>nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs""%temp%getadmin.vbs"exit /B:gotAdminif 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:Buildexeset src_dir=%~pd0Src:Jenkins 工作空间路径为 % WORKSPACE%:set src_dir=%WORKSPACE%Srcset 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.csprojMSBuild %desktop_dir%UIMain.Gui.csproj -p:WarningLevel=0;SolutionDir=%desktop_dir%ECHO ================================================desktop Done===========================================================ECHO .ECHO .
: 拷贝文件ECHO Copy desktopxcopy /Y /E /Q /I /exclude:%src_dir%exclude.txt %desktop_dir%Build %bg_dir%desktop
: 调用 Advanced Installer 打包D:cd D:Advanced Installer16.7binx86advinst.exe /rebuild "E:BuildddPCR.aip"
pause

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

logs.gitignore.xml.pdbdata

感谢阅读!