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

构建Azure Functions时临时目录生成WorkerExtensions.csproj致磁盘占用的排查

Azure Functions构建生成临时WorkerExtensions项目文件夹的原因与清理方案

一、生成原因与机制

这些临时文件夹是Azure Functions .NET Worker SDK在构建过程中自动生成的,核心目的是动态合并项目中引用的所有Functions扩展包(如Storage Blobs、ServiceBus等),最终输出统一的Microsoft.Azure.Functions.Worker.Extensions.dll,避免运行时出现扩展依赖冲突。

具体流程:

  • 执行dotnet publish或构建Azure Functions项目时,SDK会在系统临时目录创建随机命名的临时项目(即你看到的hg02d4sd.p1z这类文件夹)
  • 临时项目会自动引入主项目中所有的Functions扩展NuGet包,扩展引用不同,临时项目的PackageReference内容也会对应变化
  • SDK编译该临时项目,将所有扩展逻辑合并到Microsoft.Azure.Functions.Worker.Extensions.dll中,再拷贝到发布目录

二、自动清理方案

1. 通过MSBuild配置自动清理

在Azure Functions项目的.csproj文件中添加以下目标,构建完成后自动清理临时文件夹:

<Target Name="CleanFunctionWorkerTempFolders" AfterTargets="Publish">
  <Exec Command="powershell.exe -Command &quot;Get-ChildItem -Path $([System.IO.Path]::GetTempPath()) -Filter '*.p1z' -Directory | Where-Object { $_.CreationTime -lt (Get-Date).AddHours(-1) } | Remove-Item -Recurse -Force&quot;" />
</Target>

该配置会在dotnet publish完成后,删除系统临时目录下1小时前创建的.p1z后缀临时文件夹,可根据需求调整时间阈值(如AddHours(-1)改为AddMinutes(-30))。

2. 系统级定期清理任务

若在CI/CD构建机器上,可设置Windows任务计划程序,定期执行以下PowerShell脚本:

Get-ChildItem -Path $env:TEMP -Filter '*.p1z' -Directory | Remove-Item -Recurse -Force

3. 升级Functions SDK版本

你当前使用的Microsoft.NET.Sdk.Functions 4.3.0属于旧版本,可能存在临时文件未自动清理的问题。升级到v4.x系列的最新稳定版,SDK会优化临时文件生命周期,自动清理无用的临时项目。

补充说明

临时文件夹的数量对应每日构建次数(你提到的每日22个即对应22次构建),大小则取决于引用的扩展包数量,扩展越多生成的合并DLL体积越大。

内容的提问来源于stack exchange,提问作者T.S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:33