使用自托管Agent发布Web API时遇权限拒绝错误
核心问题
构建正常但发布失败,报错为权限拒绝访问Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll,移除类库引用后发布恢复正常,已尝试删除_work文件夹无效,使用Azure DevOps本地版本。
解决步骤
检查自托管Agent运行账户权限
确保Agent服务的运行账户(默认是NT AUTHORITY\NETWORK SERVICE或自定义账户)对路径f:\agent\_work\_tasks\DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b\2.181.0\dotnet-build-helpers拥有读写和修改权限。右键目录→属性→安全,添加对应账户并赋予权限。更换DotNetCoreCLI任务版本
当前使用的2.181.0版本可能存在兼容性问题,在Pipeline的DotNetCoreCLI任务中,将版本指定为@latest或者稳定的旧版本(比如2.200.0),避免版本bug导致的文件锁或权限问题。排查类库项目的构建配置
检查Infra和应用层类库的Post-build事件,是否有脚本在构建后复制文件到Agent任务目录,或者修改了全局MSBuild相关文件;同时确认类库的输出目录是否与Web API的发布目录存在冲突,导致文件被占用。彻底清理Agent任务缓存
除了删除_work文件夹,还要删除Agent安装目录下tasks\DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b整个目录,然后重启自托管Agent服务,让Agent重新下载任务文件包。调整发布任务参数
在DotNetCoreCLI的publish步骤中,添加--no-build参数(前提是构建步骤已经完成),避免发布阶段重复构建导致文件锁;同时检查Pipeline是否有并行执行的任务,确保发布时没有其他进程占用目标文件。
内容的提问来源于stack exchange,提问作者Rama

