当前位置 : 主页 > 网络编程 > net编程 >

MSBuild 命令的简单使用

来源:互联网 收集:自由互联 发布时间:2023-09-07
MSBuild命令的简单使用 目录 ​​MSBuild 命令的简单使用​​ ​​位置​​ ​​命令​​ ​​语法​​ ​​参数​​ ​​开关​​ ​​示例​​ ​​问题​​ ​​1、VS 中的生成前事

MSBuild 命令的简单使用

目录

​​MSBuild 命令的简单使用​​

​​位置​​

​​命令​​

​​语法​​

​​参数​​

​​开关​​

​​示例​​

​​问题​​

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

​​2、阻止输出警告信息​​

​​示例​​

​​独立观察员 2022 年 7 月 7 日​​

位置

在 ​​VS​​ 安装目录下,如:D:\Microsoft Visual Studio\2022\Enterprise\​​MSBuild​​\Current\Bin

​​

MSBuild 命令的简单使用_desktop

​​

 

命令

​​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 命令的简单使用_microsoft_02

​​

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

MSBuild 命令的简单使用_microsoft_03

​​

参考《[​​使用 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:\JenkinsData\workspace\Src\desktop.sln -p:Solutinotallow=D:\JenkinsData\workspace\Src\

 

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

MSBuild 命令的简单使用_microsoft_04

​​

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%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
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:\Build\exe
set src_dir=%~pd0\Src
:Jenkins 工作空间路径为 %WORKSPACE%
:set src_dir=%WORKSPACE%\Src
set desktop_dir=%src_dir%\desktop

:设置编译的环境变量
:set PATH="D:\Microsoft Visual Studio\2022\Enterprise\Common7\IDE";%PATH%
set PATH="D:\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin";%PATH%

:执行编译
ECHO ***************************************** Build desktop *****************************************
:devenv %desktop_dir%\desktop.sln /rebuild DEBUG
:devenv %desktop_dir%\desktop.sln /build DEBUG /project %desktop_dir%\UI\Main.Gui.csproj
MSBuild %desktop_dir%\UI\Main.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 Installer\16.7\bin\x86\
advinst.exe /rebuild "E:\Build\ddPCR.aip"

pause

 

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

logs
.gitignore
.xml
.pdb
data

 

感谢阅读!

 

原创文章,转载请注明: 转载自 ​​独立观察员​​

本文链接地址: ​​MSBuild 命令的简单使用 [​​http://dlgcy.com/msbuild-simple-use/​]


上一篇:ASP.NET Core入门七
下一篇:没有了
网友评论