Azure Pipeline使用DotNetCoreCLI@2打包时如何将oldcode.dll纳入NuGet包
解决方案
最简方案(无需修改流水线/新增nuspec文件)
直接修改你的ProjectName.csproj文件,添加文件打包配置即可实现和原有.NET Framework版本一致的打包结构,无需调整现有流水线的pack任务配置:
- 先将
oldcode.dll以及原有project.targets放到项目目录下,比如存放在项目根目录的native文件夹内 - 在csproj文件中添加如下ItemGroup配置:
<ItemGroup> <!-- 将oldcode.dll打包到NuGet包的build目录下 --> <None Include="native\oldcode.dll" Pack="true" PackagePath="build\oldcode.dll" /> <!-- 将targets文件一并打包到build目录下 --> <None Include="native\project.targets" Pack="true" PackagePath="build\project.targets" /> </ItemGroup>
配置完成后直接运行原有的DotNetCoreCLI@2 pack任务即可生成符合预期结构的NuGet包。
其他问题解答
1. 是否可以在push前手动复制dll到NuGet包内
可以但不推荐。NuGet包本质是zip压缩包,你可以在pack任务执行完成后,解压生成的.nupkg文件,将oldcode.dll放到对应目录后重新压缩改回后缀。但需要注意手动修改包内容后需要同步更新包内.nuspec文件的文件哈希校验值,否则会出现NuGet校验失败的问题,维护成本远高于直接修改csproj的方案。
2. nuspec相关配置问题
你之前的自定义任务配置有误,dotnet pack的命令参数需要放在arguments字段而不是custom字段,正确配置如下:
- task: DotNetCoreCLI@2 inputs: command: 'custom' custom: 'pack' arguments: '**/NameOfFile.nuspec'
官方给出的「基于csproj指定nuspec文件打包」的方案是适用的,但需要额外维护独立的nuspec文件,维护成本高于直接修改csproj属性的方案,无特殊需求不需要采用。
内容的提问来源于stack exchange,提问作者Mobz
相关产品推荐
相关产品推荐

