如何使用Azure构建号标记INF文件的driverVer版本
解决INF文件中使用Azure构建号动态生成DriverVer的问题
核心思路
INF文件本身不会自动解析Azure Pipeline的环境变量,必须在构建前通过文本替换把占位符替换成实际的构建号。以下是具体步骤:
1. 修改INF文件的占位符
先把INF里的DriverVer行改成带占位符的格式,比如:
DriverVer=04/10/2024,1.0.14.__BUILD_ID__
这里用__BUILD_ID__作为占位符(双下划线避免和其他内容冲突),日期部分可以固定,或者后面也换成动态日期。
2. 在Azure Pipeline中添加替换任务
用Azure DevOps的Replace Tokens任务(在Pipeline市场可添加)来替换INF里的占位符:
- 在你的
azure-pipelines.yml中添加任务:
- task: replacetokens@5 inputs: rootDirectory: '$(Build.SourcesDirectory)' targetFiles: '**/*.inf' # 匹配你的INF文件路径,可指定具体文件比如'driver/myDriver.inf' encoding: 'auto' tokenPattern: 'default' tokenPrefix: '__' tokenSuffix: '__' writeBOM: false actionOnMissing: 'warn' keepToken: false actionOnNoFiles: 'continue' enableTransforms: false enableRecursion: false useLegacyPattern: false enableTelemetry: true
- 在Pipeline的变量里添加
BUILD_ID,值设为$(Build.BuildId)(Azure默认的递增构建号),或者你自定义的构建号部分(比如$(Build.BuildNumber)如果是自定义格式)。
3. 可选:动态生成DriverVer的日期部分
如果想让日期也用构建当天的日期,把INF里的日期改成占位符:
DriverVer=__BUILD_DATE__,1.0.14.__BUILD_ID__
然后在Pipeline变量里添加BUILD_DATE,值设为$(Build.StartTime:MM/dd/yyyy)(Azure会自动把构建开始时间格式化成MM/dd/yyyy,符合DriverVer的日期要求)。
4. 同步VCXPROJ的版本(可选)
如果你希望VCXPROJ里的版本属性也包含构建号,可以用PowerShell脚本在替换INF前修改VCXPROJ:
$vcxprojPath = "$(Build.SourcesDirectory)/driver/myDriver.vcxproj" $xml = [xml](Get-Content $vcxprojPath) $versionNode = $xml.Project.PropertyGroup | Where-Object { $_.Version } $versionNode.Version = "1.0.14.$(Build.BuildId)" $xml.Save($vcxprojPath)
把这段脚本作为Pipeline的一个PowerShell任务放在替换INF的任务之前。
为什么直接用环境变量不行?
驱动项目的INF文件在编译/打包过程中,不会自动读取系统环境变量并替换内容,必须通过构建过程中的主动文本替换来完成占位符的替换,这是INF文件的静态特性决定的。
内容的提问来源于stack exchange,提问作者shravya
相关产品推荐
相关产品推荐

