NUnit TestContext.AddTestAttachment超255字符长路径无法挂载至Azure测试计划的问题
长路径NUnit测试附件无法挂载到Azure测试计划的根因
出现附件未挂载、日志提示“磁盘上不存在该位置的文件”但实际文件确实存在的情况,核心原因是三层255字符路径限制,并非文件本身缺失:
- NUnit旧版本的TestContext内部使用无长路径感知的文件API,读取附件路径时会被Windows默认MAX_PATH(255字符)上限截断,生成无效的路径访问请求
- Azure Pipeline测试结果发布组件默认未开启长路径兼容,解析附件路径时会截断超长路径,匹配不到实际文件
- 测试代理所在的Windows系统默认未开启Win32长路径支持,会拦截超过长度的文件访问请求
整个流程中,各组件对文件访问失败做了静默吞异常处理,因此不会抛出明确的长路径错误,只会输出无明确指向的“文件不存在”警告。
分步可落地的解决方法
- 升级NUnit框架版本到3.14.0及以上:该版本之后
TestContext.AddTestAttachment方法替换为长路径兼容的文件访问API,解决旧版本内部截断路径的问题 - 开启测试代理的长路径支持:
- 如果使用微软托管代理:选择
windows-2022及以上版本的镜像,该类镜像已默认开启系统级长路径支持;如果使用旧版windows-2019及更早镜像,需要在测试任务前添加内联PowerShell脚本,执行注册表配置Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1后重启代理服务 - 如果使用自托管代理:在代理所在机器上执行上述注册表配置,将
LongPathsEnabled设为1后重启代理服务
- 如果使用微软托管代理:选择
- 调整Azure Pipeline的测试结果发布任务配置:在Publish Test Results任务的高级设置中,勾选启用长路径支持选项,让任务在解析测试附件时使用长路径兼容API
- 极端场景下的兜底处理:如果上述配置开启后仍有路径超限的文件,可在测试代码中将原长路径下的目标附件,先复制到测试上下文下的短路径临时目录(例如工作目录下的
./attach文件夹,使用简短的GUID作为文件名,确保总路径长度远小于255字符),再将该短路径作为参数传给TestContext.AddTestAttachment,规避组件的路径截断逻辑
注意:传入
TestContext.AddTestAttachment的路径需要是绝对路径,避免相对路径在解析过程中被额外拼接字符进一步拉长,触发长度限制。
内容的提问来源于stack exchange,提问作者Siddhu255
相关产品推荐
相关产品推荐

