Azure DevOps中DotNetCoreCLI Pack忽略--no-build,额外项目被构建问题
解决DotNet Pack时
--no-build被忽略及额外项目被构建的问题 我来帮你排查并解决这个问题,咱们一步步来:
1. 统一--no-build的使用方式
你在Pack任务里同时设置了nobuild: true和arguments: '--no-build',这属于重复操作,反而可能导致参数解析异常。DotNetCoreCLI@2的pack任务中,nobuild: true已经会自动向命令添加--no-build参数,所以只需要保留其中一种方式即可,推荐保留任务输入参数,移除arguments里的重复项:
- task: DotNetCoreCLI@2 displayName: "ProvisionPackProjects" inputs: command: 'pack' nobuild: true projects: ${{ parameters.projects }} versioningScheme: 'byEnvVar' versionEnvVar: 'NugetVersion' # 移除重复的--no-build参数 arguments: ''
2. 精确过滤要打包的项目,排除测试项目
虽然你已经指定了目标项目,但可以通过添加排除规则确保测试项目完全被排除在外,修改主YAML中传递的projects参数:
# 主YAML中修改parameters传递 steps: - template: AzureDevOps/Templates/provision-template.yml parameters: projects: | **/ProjectA.csproj **/ProjectB.csproj !**/*Test*.csproj
这样可以明确告诉任务不要处理任何包含"Test"的项目,避免意外构建或打包测试项目。
3. 优化Build任务的参数配置
你的Build任务已经单独做了Restore操作,所以可以添加--no-restore参数提升效率,同时确保只构建目标项目的必要依赖:
- task: DotNetCoreCLI@2 displayName: "ProvisionBuildProjects" inputs: command: 'build' projects: ${{ parameters.projects }} arguments: '--configuration release --no-cache --no-restore'
4. 检查项目文件(csproj)的配置
打开ProjectA和ProjectB的csproj文件,确认没有以下可能导致额外项目被打包的配置:
- 没有不必要的测试项目引用
- 没有设置
<IncludeBuildOutput>以外的特殊包含规则 - 没有启用
<PackAsTool>这类会改变打包行为的模式
5. 验证实际执行命令
你可以在Pipeline中开启详细日志,查看Pack任务实际执行的命令,确认--no-build参数是否被正确传递,以及是否只针对指定项目执行。
按照以上步骤修改后,应该就能实现无构建打包,且不会包含额外的测试项目了。
内容的提问来源于stack exchange,提问作者BrunoMartinsPro
相关产品推荐
相关产品推荐

