如何在PowerShell脚本中通过Launch-VsDevShell.ps1编译解决方案
在PowerShell中调用Launch-VsDevShell.ps1后执行带参数的MSBuild
方法1:直接通过Launch-VsDevShell的-Command参数执行MSBuild
这种方式会启动VsDevShell环境并直接运行指定的MSBuild命令,执行完成后环境自动退出(除非指定-NoExit)。
示例代码:
# 定义变量,根据实际场景替换 $date = Get-Date -Format "yyyyMMddHHmmss" $sln = "YourSolution.sln" $workfolder = $PWD.Path $msbuildlogErr = "$workfolder\Logs\errors.log" # 拼接完整MSBuild命令(路径含空格时用双引号包裹) $msbuildCommand = @" msbuild "$workfolder\build\$sln" /m /nr:false /bl:"$workfolder\Logs\binarylog_$date_$sln.binlog" /nologo /flp:errorsonly;LogFile="$msbuildlogErr" "@ # 调用Launch-VsDevShell并执行MSBuild # 注意根据你的VS版本、Edition调整脚本路径 & "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1" ` -Arch x64 ` -Command $msbuildCommand
方法2:先导入VsDevShell环境到当前会话,再执行MSBuild
如果需要在同一个会话中执行多个依赖开发者环境的命令,可以先导入环境变量,再单独调用MSBuild。
示例代码:
# 定义变量 $date = Get-Date -Format "yyyyMMddHHmmss" $sln = "YourSolution.sln" $workfolder = $PWD.Path $msbuildlogErr = "$workfolder\Logs\errors.log" # 导入VsDevShell环境到当前PowerShell会话 & "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1" ` -Arch x64 ` -NoExit:$false # 执行MSBuild,此时会话已拥有开发者控制台的所有环境变量 $arglist = @" "$workfolder\build\$sln" /m /nr:false /bl:"$workfolder\Logs\binarylog_$date_$sln.binlog" /nologo /flp:errorsonly;LogFile="$msbuildlogErr" "@ $resbuild = Start-Process msbuild -ArgumentList $arglist -PassThru -Wait
注意事项
- VS路径调整:根据你的Visual Studio版本(2019/2022等)和版本类型(Community/Professional/Enterprise)修改
Launch-VsDevShell.ps1的路径。 - 架构参数:使用
-Arch指定目标架构,可选值有x86、x64、arm、arm64等,匹配你的编译需求。 - 路径转义:如果路径包含空格,必须用双引号包裹,避免参数解析错误。
- 等待执行完成:如果需要等待MSBuild编译完成再继续脚本,在
Start-Process中添加-Wait参数。
内容的提问来源于stack exchange,提问作者galsi
相关产品推荐
相关产品推荐

