Azure DevOps图形化生成流水线.NET Core 5项目NuGet打包失败如何解决
解决方案
一、修复现有NuGet pack任务报错
- 首先升级NuGet工具版本:在流水线最前面添加「NuGet 工具安装器」任务,指定NuGet版本为5.8及以上,该版本原生支持.NET 5项目打包,可解决NU5128、文件占用这类兼容性报错。
- 补齐NuGet包元数据:在项目.csproj文件的PropertyGroup节点下添加如下配置,消除NU5115类警告:
<PackageId>SomeCompanyPackages</PackageId> <Version>$(Build.BuildNumber)</Version> <Authors>你的团队名称</Authors> <Description>包功能描述</Description> <TargetFramework>net5.0</TargetFramework>
如果你不想修改项目文件,也可以在NuGet pack任务的「附加参数」栏填入:-Properties "Authors=你的团队名称;Description=包功能描述"
- 修改包输出路径:将NuGet pack任务的输出目录改为
$(Build.ArtifactStagingDirectory)\Packages,避免源代码目录下的旧包被进程锁定导致的占用报错,打包前可额外添加一个命令行任务执行del /s /q $(Build.SourcesDirectory)\*.nupkg清理残留包文件。
二、无.NET Core CLI任务时的替代打包方案
不需要切换到yml配置,直接使用经典流水线自带的「命令行」任务调用dotnet pack命令即可,该方式对.NET 5项目的兼容性远高于NuGet.exe,步骤如下:
- 确保构建代理已安装.NET 5 SDK(微软托管代理默认已包含)
- 在构建成功的步骤之后,添加「命令行」任务,输入如下脚本:
dotnet pack $(Build.SourcesDirectory)\你的项目路径\项目名.csproj --configuration Release --output $(Build.ArtifactStagingDirectory)\Packages /p:PackageVersion=$(Build.BuildNumber)
- 后续可直接使用「NuGet 推送」任务将$(Build.ArtifactStagingDirectory)\Packages目录下的nupkg文件推送到目标源即可。
内容的提问来源于stack exchange,提问作者yBother
相关产品推荐
相关产品推荐

