You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:05