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

Azure DevOps Pipeline生成NuGet包失败:输出目录为空求助

NuGet包未生成及目录空警告的修正方案

问题概述

Azure DevOps Pipeline执行后未生成.nupkg文件,同时收到警告:##[warning]Directory 'D:\a\1\a\nuget' is empty. Nothing will be added to build artifact 'nuget-package'

核心问题分析

主要原因是Nuspec文件中的路径配置与实际项目结构不匹配,导致打包时找不到要包含的文件;其次是构建和打包任务的参数配置存在疏漏,未确保输出文件路径对齐。

具体修正步骤

1. 修正Nuspec文件的路径配置

根目录下的Framework.nuspec中,files节点的src路径未匹配项目实际结构:

  • 构建后的dll/pdb位于子项目的bin/Release/net9.0目录下,而非根目录的bin
  • 图片路径Framework/Images不存在,需对应实际项目中的图片位置

修改后的Nuspec文件:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>Framework.UI.Selenium.MSTest</id>
    <version>1.0.0</version>
    <authors>Author</authors>
    <owners>Owner</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This tool helps you to automate UI Web applications.</description>
    <tags>Selenium; C#; Framework; Automation; UIFramework</tags>
    <dependencies>
      <group targetFramework="net9.0" />
    </dependencies>
    <contentFiles>
      <files include="**\*.png" buildAction="Content" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <!-- 修正dll/pdb路径,匹配子项目的构建输出 -->
    <file src="Framework.UI.Selenium.MSTest/bin/Release/net9.0/Framework.UI.Selenium.MSTest.dll" target="lib/net9.0/" />
    <file src="Framework.UI.Selenium.MSTest/bin/Release/net9.0/Framework.UI.Selenium.MSTest.pdb" target="lib/net9.0/" />
    <!-- 假设图片在子项目的Images目录下,修正路径 -->
    <file src="Framework.UI.Selenium.MSTest/Images/*.png" target="contentFiles/any/net9.0/Framework/Images/" />
  </files>
</package>

2. 完善构建任务的参数

在DotNetCoreCLI@2的build任务中,明确指定目标框架,确保构建输出与Nuspec中的targetFramework一致:

- task: DotNetCoreCLI@2
  displayName: 'Build the project'
  inputs:
    command: 'build'
    projects: '$(projectPath)'
    arguments: '--configuration $(buildConfiguration) --framework net9.0'

3. 替换打包任务为DotNetCoreCLI(更适配.NET 9)

推荐使用DotNetCoreCLI@2的pack命令替代NuGetCommand@2,它能更好地识别.NET项目的输出路径,同时支持指定Nuspec文件:

- task: DotNetCoreCLI@2
  displayName: 'Pack NuGet package using Framework.nuspec'
  inputs:
    command: 'pack'
    packagesToPack: '$(nuspecFile)'
    packDirectory: '$(outputDir)'
    arguments: '--configuration $(buildConfiguration) --no-build'
    versioningScheme: 'off'
  • --no-build:避免重复构建,直接使用之前build任务的输出
  • packDirectory:指定包输出目录,与之前的outputDir变量对齐

4. 若坚持使用NuGetCommand的补充配置

如果继续使用NuGetCommand@2,需在pack任务中添加basePath参数,指定项目根目录,确保Nuspec能正确解析相对路径:

- task: NuGetCommand@2
  displayName: 'Pack NuGet package using Framework.nuspec'
  inputs:
    command: 'pack'
    packagesToPack: '$(nuspecFile)'
    packDestination: '$(outputDir)'
    versioningScheme: 'off'
    arguments: '-BasePath $(Build.SourcesDirectory)'

最终完整YAML示例

# azure-pipelines.yml
trigger:
  branches:
    include:
      - main  # 替换为你的实际分支

pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  projectPath: 'Framework.UI.Selenium.MSTest/Framework.UI.Selenium.MSTest.csproj'
  nuspecFile: 'Framework.nuspec'
  outputDir: '$(Build.ArtifactStagingDirectory)/nuget'

steps:

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '9.x'  # 匹配你的.NET SDK版本

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  displayName: 'Restore NuGet packages'
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'

- task: DotNetCoreCLI@2
  displayName: 'Build the project'
  inputs:
    command: 'build'
    projects: '$(projectPath)'
    arguments: '--configuration $(buildConfiguration) --framework net9.0'

- task: DotNetCoreCLI@2
  displayName: 'Pack NuGet package using Framework.nuspec'
  inputs:
    command: 'pack'
    packagesToPack: '$(nuspecFile)'
    packDirectory: '$(outputDir)'
    arguments: '--configuration $(buildConfiguration) --no-build'
    versioningScheme: 'off'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(outputDir)'
    ArtifactName: 'nuget-package'
    publishLocation: 'Container'

内容的提问来源于stack exchange,提问作者Sandeep Dhamale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:40:54