Azure DevOps CI构建.NET Core项目无报错但未生成工件问题排查求助
排查Azure .NET Core流水线未生成工件的问题
我看了你的YAML配置,发现几个关键问题导致构建完成但没有生成工件,咱们一步步来梳理:
主要问题分析
- Publish任务参数错误:在
Publish WebApi步骤里,你写了--runtime -r $(runtime),这里重复了运行时参数(--runtime和-r是同一个参数的长/短格式),会导致DotNet CLI解析失败,大概率没有正确把发布产物输出到$(Build.ArtifactStagingDirectory)目录。 - 缺少发布工件的核心步骤:你已经把文件复制到了
$(Build.ArtifactStagingDirectory),但没有使用专门的任务把这个目录的内容正式发布为流水线工件,所以Azure DevOps不会展示生成的工件。 - CopyFiles任务冗余且可能有问题:你的CopyFiles任务没有指定源目录,默认会复制工作目录下的所有文件到staging目录,这不仅没必要(因为Publish任务已经可以直接输出到目标目录),还可能混入无关文件,甚至覆盖正确的发布产物。
修复后的YAML配置
我调整了你的配置,修复了上述问题,你可以试试这个版本:
trigger: branches: include: - release/* paths: include: - Reeft/Organization/OrganizationService/* - Reeft/Organization/OrganizationServicePipelines/organization-service-test.yml pool: vmImage: 'windows-2022' variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' projectName: '**/F11.Web.csproj' runtime: 'win-x64' steps: - task: UseDotNet@2 displayName: 'Use .NET 5 SDK (preview)' inputs: packageType: 'sdk' version: '5.0.100-rc.1.20452.10' vsVersion: '16.8.0' includePreviewVersions: true - task: DotNetCoreCLI@2 inputs: command: 'restore' projects: '$(projectName)' feedsToUse: 'select' - task: DotNetCoreCLI@2 displayName: Build inputs: projects: '$(projectName)' arguments: '--no-restore' - task: DotNetCoreCLI@2 displayName: Test inputs: command: test # 注意:如果你的Web项目没有测试代码,这里应该指向测试项目的csproj,比如**/*Tests.csproj projects: '$(projectName)' arguments: '-l "console;verbosity=detailed"' - task: DotNetCoreCLI@2 displayName: 'Publish WebApi' inputs: command: publish publishWebProjects: false projects: '$(projectName)' # 修复重复的runtime参数,同时确保输出到ArtifactStagingDirectory arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory) --runtime $(runtime) --self-contained true' # 如果不需要自包含部署,可以去掉--self-contained true - task: PublishPipelineArtifact@1 displayName: 'Publish Artifact' inputs: targetPath: '$(Build.ArtifactStagingDirectory)' artifact: 'drop' publishLocation: 'Container'
额外提示
- 如果你用的是Web项目,
Test步骤里的$(projectName)指向的是Web项目,而不是测试项目,这可能会导致测试任务警告“找不到测试”,建议把测试项目单独指定,比如projects: '**/*Tests.csproj'。 - 确认你的
$(projectName)变量能正确匹配到目标Web项目,避免路径匹配错误导致发布空内容。
内容的提问来源于stack exchange,提问作者Taqi Rizvi
相关产品推荐
相关产品推荐

