TFS构建中MSBuild排除含数字6的.csproj项目配置问题
TFS MSBuild任务排除含数字“6”的项目解决方案
核心问题:语法规则误解
TFS的MSBuild步骤中指定项目时,使用的是MSBuild原生通配符语法,而非你推测的fnmatch语法。MSBuild通配符不支持!(6)这类否定匹配、复杂字符组排除的写法,这是你之前的表达式全部失效的原因。
可行解决方案
方案1:使用MSBuild的ExcludeProjects属性
这是最直接的方法,无需复杂通配符:
- 在MSBuild任务的Arguments字段中添加以下参数:
/p:ExcludeProjects="**/*6*.csproj" - 同时保持MSBuild任务的Projects字段为
**/*.csproj。 - 原理:MSBuild会先匹配所有
.csproj项目,再通过ExcludeProjects排除名称中包含“6”的项目。
方案2:PowerShell预筛选项目列表(适用于复杂场景)
如果ExcludeProjects在你的TFS版本中不生效,可以用PowerShell先筛选出符合要求的项目,再传递给MSBuild:
- 添加一个PowerShell步骤,脚本内容如下:
# 递归查找所有csproj,排除名称含“6”的项目 $targetProjects = Get-ChildItem -Recurse -Filter *.csproj | Where-Object { $_.Name -notcontains '6' } # 将项目路径拼接为分号分隔的字符串,存入变量 $projectList = $targetProjects.FullName -join ';' # 设置TFS变量供后续MSBuild步骤使用 Write-Host "##vso[task.setvariable variable=FilteredProjects]$projectList" - 在MSBuild步骤的Projects字段中引用变量:
$(FilteredProjects)
验证建议
先在本地环境用MSBuild命令行测试效果,确认无误后再部署到TFS:
msbuild **/*.csproj /p:ExcludeProjects="**/*6*.csproj"
内容的提问来源于stack exchange,提问作者JED
相关产品推荐
相关产品推荐

