如何在Azure Pipeline的DotNetCoreCLI@2任务中传递项目路径至dotnet publish
解决Azure Pipeline中DotNetCoreCLI任务传递projects变量的问题
问题背景
原本直接写多行projects配置的DotNetCoreCLI@2任务可以正常运行,但将projects的值转为变量/参数传递时,出现##[error]Project file(s) matching the specified pattern were not found.错误。
正确解决方案
方案1:使用参数(推荐,适合模板化场景)
模板化时用参数传递多行项目模式最可靠,参数支持原样保留多行格式:
parameters: - name: projectsToPublish type: string default: | **/*.csproj !**/*Blazor.csproj steps: - task: DotNetCoreCLI@2 displayName: 'Dotnet Publish' inputs: command: 'publish' publishWebProjects: false projects: ${{ parameters.projectsToPublish }} arguments: '-o $(Build.ArtifactStagingDirectory)'
通过${{ parameters.projectsToPublish }}引用参数,解析后的格式和原工作配置完全一致。
方案2:使用变量传递
如果必须用变量,需用YAML块标量语法定义变量,保留正确的换行和格式:
variables: projectsToPublish: | **/*.csproj !**/*Blazor.csproj steps: - task: DotNetCoreCLI@2 displayName: 'Dotnet Publish' inputs: command: 'publish' publishWebProjects: false projects: $(projectsToPublish) arguments: '-o $(Build.ArtifactStagingDirectory)'
注意:变量定义时不要加引号,|是YAML的块标量标记,用于保留换行,确保传递给任务的模式和原配置一致。
失败原因分析
- 用分号分隔变量值时,任务可能无法正确解析分号为多模式分隔符,导致匹配失败。
- 给带
|的变量加引号后,|会被当成字符串内容的一部分,而非YAML语法,传递的模式包含无效字符。 - 带换行的变量写法中如果存在多余缩进,会导致模式包含多余空格,无法匹配项目文件。
内容的提问来源于stack exchange,提问作者sanjeev
相关产品推荐
相关产品推荐

