使用MSBuild构建Delphi项目组时,如何跳过无Win64平台的项目?
解决Delphi 10.3项目组MSBuild构建未配置平台的问题
方法1:修改项目组文件添加条件判断
Delphi项目组文件(.groupproj)默认会强制所有项目按指定平台构建,不管项目本身是否配置了该平台。你可以给每个项目引用节点添加条件,仅当项目包含Win64平台配置时才构建它。
打开你的项目组文件,找到每个<ProjectReference>节点,添加Condition属性:
<ProjectReference Include="YourProject.dproj"> <Project>{项目GUID}</Project> <!-- 仅当项目存在且包含Win64平台配置时才参与构建 --> <Condition>Exists('YourProject.dproj') and $([MSBuild]::GetContentOfFile('YourProject.dproj').Contains('<Platform Name="Win64"/>'))</Condition> </ProjectReference>
这个条件会读取项目文件内容,自动识别是否包含Win64平台定义,只有符合条件的项目才会在/p:Platform=Win64构建时被执行。
方法2:通过IDE配置管理器调整构建选项
在Delphi IDE里直接配置项目组的Win64构建范围,无需修改代码:
- 右键点击项目组,选择配置管理器
- 在「活动解决方案平台」下拉菜单中选择
Win64 - 对每个未配置Win64的项目,取消勾选「生成」列的复选框
- 保存项目组配置
之后用MSBuild构建项目组时,会自动遵循这个配置,跳过未勾选的项目。
方法3:用脚本筛选并构建支持Win64的项目
如果不想修改项目组文件或IDE配置,可以用PowerShell脚本先筛选出支持Win64的项目,再逐个构建:
PowerShell脚本示例:
# 读取项目组中的所有项目路径 $projGroupContent = Get-Content "YourGroup.groupproj" $projectPaths = $projGroupContent | Select-String -Pattern 'Include="(.*\.dproj)"' | ForEach-Object { $_.Matches.Groups[1].Value } # 筛选出包含Win64平台配置的项目 $win64Projects = @() foreach ($projPath in $projectPaths) { if (Get-Content $projPath | Select-String -Pattern '<Platform Name="Win64"/>') { $win64Projects += $projPath } } # 逐个构建符合条件的项目 foreach ($proj in $win64Projects) { msbuild $proj /p:Platform=Win64 /t:Build }
内容的提问来源于stack exchange,提问作者Anton Larin
相关产品推荐
相关产品推荐

