如何在Azure DevOps Pipelines中创建含项目依赖的NuGet包?
解决单个NuGet包打包多项目依赖的问题
针对你遇到的打包后无DLL的问题,从路径配置和Pipeline任务两个核心环节调整即可解决:
一、修正Dotnet Build任务的输出配置
默认dotnet build会把DLL输出到每个项目的bin/[配置]目录,你需要统一输出到指定目录,方便后续打包引用:
- 在Build任务的参数中添加:
--configuration Release --output $(build.artifactstagingdirectory)/build-output - 确保项目路径覆盖所有需要打包的项目(比如你的Library、ProjA、ProjB等),路径示例:
**/CompanyName.Library.*.csproj或**/Proj[A-D].csproj
二、调整Nuspec的文件匹配规则
你当前的src路径存在绝对路径错误、通配符格式问题,修正后的files节点如下:
<files> <!-- 匹配build-output目录下主项目的DLL --> <file src="build-output/CompanyName.Library.*.dll" target="lib/net6.0" /> <!-- 匹配所有依赖项目(ProjA/B/C/D)的DLL --> <file src="build-output/Proj*.dll" target="lib/net6.0" /> <!-- 可选:包含调试符号PDB文件 --> <file src="build-output/CompanyName.Library.*.pdb" target="lib/net6.0" /> <file src="build-output/Proj*.pdb" target="lib/net6.0" /> </files>
三、优化Dotnet Pack任务参数
因为已经提前完成构建,打包时需要指定依赖文件的基础路径:
- 勾选不构建选项
- 在参数中添加:
--base-path $(build.artifactstagingdirectory) --configuration Release --output $(build.artifactstagingdirectory)/nuget-packages--base-path告诉NuGet去哪里找nuspec中src指定的文件--output指定生成的nupkg包存放目录,方便后续Push任务引用
四、额外验证步骤(可选)
如果还是出现问题,在Pack任务前添加一个PowerShell任务,执行以下命令确认DLL是否生成在指定目录:
Get-ChildItem $(build.artifactstagingdirectory)/build-output -Filter *.dll
关键注意事项
- 所有需要打包的项目必须是项目引用(ProjectReference),而非NuGet包引用,否则Build环节不会生成对应的DLL
- 确保所有项目的目标框架与
nuspec中target路径的net6.0一致
内容的提问来源于stack exchange,提问作者RHarris
相关产品推荐
相关产品推荐

