ASP.NET Core 3.1自托管GitHub Action发布时nupkg被进程占用报错
解决自托管GitHub Action中VB.NET依赖项目nupkg文件被占用的问题
针对你遇到的nupkg文件被进程占用的发布错误,提供以下实用解决思路:
禁用并行构建
GitHub Action默认可能并行处理多项目构建,容易导致文件冲突。在发布命令中添加--no-parallel参数强制串行构建:dotnet publish --framework netcoreapp3.1 --runtime linux-x64 -c Release --no-parallel或者直接在VB.NET依赖项目的
.vbproj文件中添加配置彻底禁用并行:<PropertyGroup> <DisableParallelBuild>true</DisableParallelBuild> </PropertyGroup>强制清理构建输出
发布前彻底清理所有项目的构建缓存和输出文件,避免残留进程占用文件。在Workflow中添加前置步骤:# 清理解决方案所有项目的构建文件 dotnet clean ./ApiProject.sln -c Release # 手动删除依赖项目和主项目的Release输出目录 rm -rf ./Dep1/dep1/bin/Release ./Dep2/dep2/bin/Release ./ApiProject/bin/Release关闭依赖项目的自动打包
错误提示来自NuGet打包任务,说明依赖项目可能开启了GeneratePackageOnBuild。如果不需要为依赖项目生成nupkg,直接在.vbproj中禁用该配置:<PropertyGroup> <GeneratePackageOnBuild>false</GeneratePackageOnBuild> </PropertyGroup>这能避免发布过程中触发打包操作导致文件锁定。
排查并清理残留进程
在Linux自托管Runner上,之前的构建进程可能异常退出残留锁。在Workflow中添加进程检查与清理步骤:# 检查目标nupkg文件是否被占用 lsof | grep "/home/gitrunner/actions-runner/_work/ApiProject/ApiProject/Dep1/dep1/bin/Release/dep1.1.0.0.nupkg" || echo "无进程占用目标文件" # 若有占用,杀掉对应的dotnet进程(可根据lsof结果精准杀PID) pkill -f "dotnet" || true使用干净的工作区
在actions/checkout步骤中启用clean参数,确保每次Workflow运行都基于全新的代码目录:- uses: actions/checkout@v4 with: clean: true
内容的提问来源于stack exchange,提问作者zabit
相关产品推荐
相关产品推荐

