You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 添加一个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"
    
  2. 在MSBuild步骤的Projects字段中引用变量:$(FilteredProjects)

验证建议

先在本地环境用MSBuild命令行测试效果,确认无误后再部署到TFS:

msbuild **/*.csproj /p:ExcludeProjects="**/*6*.csproj"

内容的提问来源于stack exchange,提问作者JED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:39:17