构建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 "Get-ChildItem -Path $([System.IO.Path]::GetTempPath()) -Filter '*.p1z' -Directory | Where-Object { $_.CreationTime -lt (Get-Date).AddHours(-1) } | Remove-Item -Recurse -Force"" /> </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.
相关产品推荐
相关产品推荐

