使用PowerShell和MSBuild构建脚本的制作与优化

在软件开发过程中,自动化构建脚本是提高开发效率的重要工具。本文将介绍如何使用PowerShell和MSBuild制作一个自动化构建脚本,并提供一些优化建议。

在紧迫的项目截止日期下,需要在一小时内完成构建脚本的编写。PowerShell脚本能够满足需求,并且运行良好。

构建脚本概述

构建步骤如下:

  • 关闭所有DevEnv实例
  • 初始化构建配置
  • 遍历SolutionConfig.txt文件中的每个解决方案并构建
  • 使用MSBuild构建项目
  • 修复构建错误并继续构建
  • 完成构建

构建步骤详解

为了确保构建过程中没有其他Visual Studio实例干扰,脚本开始时会请求关闭所有DevEnv实例。

Write-Host "请确保在运行脚本前没有运行任何Visual Studio实例..." -ForegroundColor Red -BackgroundColor White Start-Sleep -s 10

构建初始化和配置如下:

  • 构建基础目录
  • 处理依赖关系(SolutionConfig.txt定义了解决方案的构建顺序)
  • MSBuild.exe的位置
  • MS Build日志配置
  • devenv的位置
  • 如果构建过程中使用Windows SDK工具,需要将其路径添加到环境变量
$baseDirectory = "D:\Project1\Source" $solutionFilesPath = "$baseDirectory\SolutionConfig.txt" $projectFiles = Get-Content $solutionFilesPath $msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" $MSBuildLogger = "/flp1:Append;LogFile=Build.log;Verbosity=Normal; /flp2:LogFile=BuildErrors.log;Verbosity=Normal;errorsonly" $devenv = "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"

检查文件是否存在,并且文件扩展名为.sln。如果需要包括其他文件,如.csproj、vcxproj等,可以在脚本中进行相应的修改。

foreach ($projectFile in $projectFiles) { if ($projectFile.EndsWith(".sln")) { $projectFileAbsPath = "$baseDirectory\$projectFile" $filename = [System.IO.Path]::GetFileName($projectFile); while ($action -eq "Y") { if (Test-Path $projectFileAbsPath) { Write-Host "正在构建 $projectFileAbsPath" & $msbuild $projectFileAbsPath /t:rebuild /p:PlatformTarget=x86 /fl "$MSBuildLogger" if ($LASTEXITCODE -eq 0) { Write-Host "构建成功" -ForegroundColor Green Clear-Host break } else { Write-Host "构建失败" -ForegroundColor Red $action = Read-Host "输入Y修复后继续,N终止,I忽略并继续构建" if ($action -eq "Y") { & $devenv $projectFileAbsPath wait-process -name devenv } elseif ($action -eq "I") { Write-Host "忽略构建失败..." break } else { Write-Host "终止构建...请修复问题后重新启动构建。" -ForegroundColor Red break } } } else { Write-Host "文件不存在:$projectFileAbsPath" Start-Sleep -s 5 break } } if ($action -eq "N") { break; } } }

MSBuild是一个构建应用程序的平台。使用MSBuild,可以在没有安装Visual Studio的系统上构建项目。

# MSBuild相关命令

要修复构建错误,需要在安装了Visual Studio的机器上运行此脚本。脚本将启动Visual Studio并打开失败的解决方案。解决所有错误后,关闭Visual Studio以继续构建下一个解决方案。

# 修复构建错误的相关命令

如果所有项目都成功编译,构建将成功完成。如果选择不修复错误,构建将因错误而终止。

日志记录

MSBuild提供了非常全面的日志记录机制。以下脚本创建了两个日志文件,一个用于记录成功的构建,另一个用于记录错误。

$msbuild = "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" $MSBuildLogger = "/flp1:Append;LogFile=Build.log;Verbosity=Normal; /flp2:LogFile=BuildErrors.log;Verbosity=Normal;errorsonly" & $msbuild $projectFileAbsPath /t:rebuild /p:PlatformTarget=x86 /fl "$MSBuildLogger"

等待进程退出

PowerShell中等待进程退出,可以通过进程名称来等待,也可以使用进程ID。

Wait-Process -name devenv # 或者 Start-Process $devenv -NoNewWindow -Wait # 或者 $proc = Start-Process -NoWindow $proc.WaitForExit()

验证路径是否存在

要检查目录或文件是否存在,可以使用Test-Path命令。Test-Path也可以用于验证WindowsPowerShell注册表提供程序中的注册表项是否存在。

if (Test-Path $projectFileAbsPath) { # 文件或目录存在 } else { # 文件或目录不存在 }

SVN更新和标记源代码

& svn co $repositoryUrl1 $repositoryUrl2 $destinationDir # 标记源代码

Win SDK工具

# Windows SDK工具路径
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485