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

TFS构建文件LastWriteTime异常,无法筛选最近2分钟修改的文件

问题:TFS构建仅打包最近修改的SSRS报表失败

我在TFS(版本16.131.28601.4)上使用Git仓库的内置构建功能,想要仅打包最近2分钟内修改的SSRS报表文件。为此编写了以下PowerShell(版本1.2.3)脚本,试图删除LastWriteTime早于2分钟的文件,但构建时所有文件的LastWriteTime都被重置为构建启动时间,导致没有文件被删除。已经将构建定义的Clean选项设为false,部署包是报表仓库而非Visual Studio解决方案文件。

当前使用的PowerShell脚本:

# Get the current working directory
$currentDirectory = Get-Location

# Append the target directory to the current working directory
$targetDirectory = Join-Path $currentDirectory "CFM Reporting Project\SSRS\Reports"

# Get all files in the target directory and its subdirectories
Get-ChildItem -Recurse $targetDirectory | 
Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-2)} | 
Remove-Item -Recurse -Force

# List all in target directory and its subdirectories
Get-ChildItem -Recurse $targetDirectory | Format-List -Property FullName,CreationTime,LastWriteTime,CheckinDate -Force  

解决方案建议

  • 改用Git提交记录筛选文件:放弃依赖文件系统的LastWriteTime,直接通过Git命令提取最近2分钟内提交修改的文件路径。例如执行git log --since="2 minutes ago" --name-only --pretty=format:获取变更文件列表,再基于这些路径保留或复制文件到打包目录。
  • 调整构建工作流顺序:在构建的源代码获取完成后,立即执行文件筛选操作,避免后续构建步骤修改文件时间戳。将筛选出的目标文件复制到独立的临时目录,再对该目录执行打包操作。
  • 利用TFS构建的变更集信息:通过TFS命令行工具(如tf.exe)或API,获取当前构建对应的变更集中的文件列表,仅打包这些变更文件。对于Git仓库,可使用构建变量(如BUILD_SOURCEVERSION)对比前后提交的差异,提取变更文件。
  • 不推荐:强行依赖文件时间:若坚持使用文件时间判断,需确保脚本在TFS完成源代码复制后立即执行,且中间无其他步骤修改文件时间。但由于TFS在拉取代码时会重置文件时间戳,这种方法可靠性极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:01:40