如何在单个Azure DevOps流水线中构建项目并发布多个NuGet包
问题解答
1. 是否可以使用同一条流水线创建并发布多个NuGet包?
完全可以。你当前配置的packagesToPack: '**/*.csproj'已经匹配了所有类库项目,只要配置正确,流水线会自动为每个符合条件的项目生成独立的NuGet包,后续推送步骤也会批量将所有生成的nupkg推送到目标feed,不需要拆分多条流水线。
2. 是否需要额外创建.nuspec文件?
不需要。你提到的Visual Studio 2021应为笔误,目前正式发布版本为Visual Studio 2022,其默认创建的.NET/.NET Core类库都是SDK风格项目,所有NuGet包的元数据(版本号、作者、描述、依赖项等)都可以直接在项目属性中配置,写入.csproj文件即可,无需单独维护.nuspec文件。只有当你需要实现非常复杂的包自定义逻辑(比如特殊的文件结构、多目标框架的特殊适配等)时,才需要额外引入.nuspec文件。
3. 为什么构建和打包步骤使用不同的输出文件夹,如何解决?
出现路径不一致的核心原因是两个步骤默认使用的构建配置不同:
- dotnet build命令如果未指定配置参数,默认使用
Debug配置,输出文件会存入对应项目的bin/Debug目录下 - NuGet pack命令默认使用
Release配置,会到bin/Release目录下查找编译产物,找不到对应文件就会报错
你只需要在流水线的构建、打包步骤统一指定配置即可解决问题,不需要手动传入复杂的路径参数。
修正后的流水线YAML参考
trigger: - main pool: vmImage: ubuntu-latest steps: - task: DotNetCoreCLI@2 displayName: Restore packages inputs: command: 'restore' projects: '**/*.csproj' feedsToUse: 'select' - task: DotNetCoreCLI@2 displayName: Build project inputs: command: 'build' projects: '**/*.csproj' arguments: '--configuration Release' # 新增:指定用Release配置构建 - task: DotNetCoreCLI@2 displayName: Run tests inputs: command: 'test' projects: '**/*[Te]ests/*.csproj' arguments: '--configuration Release' # 可选:测试步骤也统一配置 - task: NuGetCommand@2 displayName: Prepare the package inputs: command: 'pack' packagesToPack: '**/*.csproj' versioningScheme: 'byEnvVar' versionEnvVar: 'PackageVersion' configuration: 'Release' # 新增:指定pack用Release配置,和构建一致 - task: NuGetCommand@2 displayName: Push the package inputs: command: 'push' packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg' nuGetFeedType: 'internal' publishVstsFeed: 'xxx'
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

