MSBuild?命令的簡單使用
獨立觀察員 2022 年 7 月 7 日
位置
在?VS?安裝目錄下,如:D:Microsoft Visual Studio2022EnterpriseMSBuildCurrentBin
命令
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) 參數:
在使用 Jenkins 的 MSBuild 插件進行編譯項目時發現該命令不能被識別:
參考《[使用 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 應該是等價的。官網介紹如下:
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語句