DotNetCoreCL Publish 步骤的工作目录参数
Working directory parameter of DotNetCoreCL Publish step
我有一个存储库,里面有很多解决方案。我想在 Azure DevOps 中设置构建管道并构建特定的解决方案。我只需要“标准”步骤,如“恢复包、构建、运行 单元测试、发布”。然而,“发布”这一步让我很头疼。
存储库的文件夹层次结构如下所示:
src
- Solution1
- Project1
- Project2
- Project3
- Solution2
- Project4
- Project5
...
我的目标是只发布例如项目。 Solution2 - 所以 Project4 和 Project5。将 workingDirectory
的值设置为“src/Solution2”或“$(System.DefaultWorkingDirectory)/src/Solution2”并没有像我预期的那样工作。
这里是构建步骤的定义。
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
workingDirectory: src/Solution2
在日志中,我看到
"C:\Program Files\dotnet\dotnet.exe" publish [path_to_agent]_work\s\src\Solution1\Project1\Project1.csproj --configuration Release --output [path_to_agent]_work\a\Project1
以及存储库中每个项目的类似条目。
作为解决方法,我尝试使用“自定义”命令,但也没有成功。
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: custom
arguments: 'src/Solution2 --configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory) '
custom: publish
这会生成一个日志条目
"C:\Program Files\dotnet\dotnet.exe" publish [path_to_agent]_work\s\src\Solution1\Project1\Project1.csproj src/Solution2 --configuration Release --output [path_to_agent]_work\a\Project1
最终管道失败为 Only one project can be specified
。
知道我做错了什么吗?
您可以尝试使用带有 globbing 的项目设置来获取所有 csproj:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: 'publish'
publishWebProjects: false
projects: 'src/Solution2/**/*.csproj'
arguments: '-o $(Build.ArtifactStagingDirectory)/Output'
zipAfterPublish: true
modifyOutputPath: true
我遇到了同样的问题。经过大量的试验和错误后,我得出的结论是 workingdirectory 参数只是被忽略了,正如 here.
所解释的那样
我还注意到,如果您使用引号,通配符 (**/*) 将不起作用。还必须将 publishWebProjects 设置为 false,否则它将开始从默认工作文件夹中搜索其他项目。
所以这对我有用:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: false
configuration: $(buildConfiguration)
projects: |
$(System.DefaultWorkingDirectory)/pathToProjectA/projectA.csproj
$(System.DefaultWorkingDirectory)/pathToProjectB/*.csproj
我有一个存储库,里面有很多解决方案。我想在 Azure DevOps 中设置构建管道并构建特定的解决方案。我只需要“标准”步骤,如“恢复包、构建、运行 单元测试、发布”。然而,“发布”这一步让我很头疼。
存储库的文件夹层次结构如下所示:
src
- Solution1
- Project1
- Project2
- Project3
- Solution2
- Project4
- Project5
...
我的目标是只发布例如项目。 Solution2 - 所以 Project4 和 Project5。将 workingDirectory
的值设置为“src/Solution2”或“$(System.DefaultWorkingDirectory)/src/Solution2”并没有像我预期的那样工作。
这里是构建步骤的定义。
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
workingDirectory: src/Solution2
在日志中,我看到
"C:\Program Files\dotnet\dotnet.exe" publish [path_to_agent]_work\s\src\Solution1\Project1\Project1.csproj --configuration Release --output [path_to_agent]_work\a\Project1
以及存储库中每个项目的类似条目。
作为解决方法,我尝试使用“自定义”命令,但也没有成功。
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: custom
arguments: 'src/Solution2 --configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory) '
custom: publish
这会生成一个日志条目
"C:\Program Files\dotnet\dotnet.exe" publish [path_to_agent]_work\s\src\Solution1\Project1\Project1.csproj src/Solution2 --configuration Release --output [path_to_agent]_work\a\Project1
最终管道失败为 Only one project can be specified
。
知道我做错了什么吗?
您可以尝试使用带有 globbing 的项目设置来获取所有 csproj:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: 'publish'
publishWebProjects: false
projects: 'src/Solution2/**/*.csproj'
arguments: '-o $(Build.ArtifactStagingDirectory)/Output'
zipAfterPublish: true
modifyOutputPath: true
我遇到了同样的问题。经过大量的试验和错误后,我得出的结论是 workingdirectory 参数只是被忽略了,正如 here.
所解释的那样我还注意到,如果您使用引号,通配符 (**/*) 将不起作用。还必须将 publishWebProjects 设置为 false,否则它将开始从默认工作文件夹中搜索其他项目。
所以这对我有用:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: false
configuration: $(buildConfiguration)
projects: |
$(System.DefaultWorkingDirectory)/pathToProjectA/projectA.csproj
$(System.DefaultWorkingDirectory)/pathToProjectB/*.csproj