TFS 2015 vNext构建itrace文件致磁盘不足的解决咨询
我之前帮团队处理过类似的TFS 2015构建服务器磁盘占用问题,针对你提到的te.processhost.managed_xxx_xxx_xxx.itrace文件(由VS Test任务开启代码覆盖率时生成且不会自动删除),有几个靠谱的解决方案,既能保留代码覆盖率功能,又能解决磁盘空间问题:
解决方案1:将临时文件定向到构建代理工作目录(无需脚本自动清理)
TFS 2015的构建代理默认会在构建完成后清理自己的工作区目录,所以我们可以让VS Test任务把这些itrace文件生成到代理的工作目录下,这样构建结束后会自动被清理:
- 打开你的TFS vNext构建定义,找到Visual Studio Test任务
- 切换到高级选项卡,找到「工作目录」(Working Directory)设置项
- 将其设置为
$(Agent.WorkFolder)\_temp(或者代理工作区内的任意子目录) - 保存构建定义并重新运行构建,之后这些itrace文件会生成在指定的工作目录中,构建完成后代理会自动清理整个工作区,无需额外操作
解决方案2:使用.runsettings配置代码覆盖率的临时文件路径
如果需要更精细的控制,可以通过自定义.runsettings文件来指定代码覆盖率跟踪文件的输出位置,同时确保这些文件会被构建流程自动处理:
- 创建一个名为
CodeCoverage.runsettings的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Configuration> <!-- 指定跟踪文件输出到构建工作目录,方便后续自动清理 --> <TraceOutputDirectory>$(Agent.WorkFolder)\_coverage_temp</TraceOutputDirectory> <!-- 设置为false,让测试任务在完成后自动删除跟踪文件 --> <KeepTraceFiles>false</KeepTraceFiles> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
- 将这个文件添加到你的源代码仓库中
- 在Visual Studio Test任务的「测试运行设置」(Test run settings)选项中,选择「指定.runsettings文件」,并填写该文件的路径(比如
$(Build.SourcesDirectory)\CodeCoverage.runsettings) - 保存构建定义后,后续构建生成的itrace文件会被放到指定目录,且
KeepTraceFiles=false会让测试任务在完成后自动删除这些跟踪文件
解决方案3:添加清理任务(脚本方式,备选)
如果上面的配置方法因为TFS版本限制无法生效,可以在VS Test任务之后添加一个PowerShell任务来自动清理文件:
- 在构建定义中添加一个新的PowerShell任务,放在Visual Studio Test任务之后
- 设置任务的「脚本类型」为「内联脚本」,输入以下命令:
# 清理C:\Windows\Temp下所有符合命名规则的itrace文件 Remove-Item -Path "C:\Windows\Temp\te.processhost.managed_*.itrace" -Force -ErrorAction SilentlyContinue
- 确保该任务的「运行条件」设置为「即使前面的任务失败,也要运行」,这样不管测试是否通过,都会执行清理操作
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

