После добавления #Aspire в мой проект мне нужно было добавить рабочую нагрузку к размещенному в Azure агенту. Изначально, согласно документации я добавил следующее:
- task: DotNetCoreCLI@2
displayName: "dotnet workload restore"
# dotnet workload restore [<PROJECT | SOLUTION>...] [options]
inputs:
command: 'custom'
custom: 'workload restore'
projects: '$(solution)'
Результат:
Starting: dotnet workload restore
==============================================================================
Task : .NET Core
Description : Build, test, package, or publish a dotnet application, or run a custom dotnet command
Version : 2.240.0
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
==============================================================================
Info: .NET Core SDK/runtime 2.2 and 3.0 are now End of Life(EOL) and have been removed from all hosted agents. If you're using these SDK/runtimes on hosted agents, kindly upgrade to newer versions which are not EOL, or else use UseDotNet task to install the required version.
/usr/bin/dotnet workload restore /home/vsts/work/1/s/Solution.sln
Could not execute because the specified command or file was not found.
Possible reasons for this include:
* You misspelled a built-in dotnet command.
* You intended to execute a .NET program, but dotnet-workload restore does not exist.
* You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
##[error]Error: The process '/usr/bin/dotnet' failed with exit code 1
Info: Azure Pipelines hosted agents have been updated and now contain .Net 5.x SDK/Runtime along with the older .Net Core version which are currently lts. Unless you have locked down a SDK version for your project(s), 5.x SDK might be picked up which might have breaking behavior as compared to previous versions. You can learn more about the breaking changes here: https://docs.microsoft.com/en-us/dotnet/core/tools/ and https://docs.microsoft.com/en-us/dotnet/core/compatibility/ . To learn about more such changes and troubleshoot, refer here: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops#troubleshooting
##[error]Dotnet command failed with non-zero exit code on the following projects : [ '/home/vsts/work/1/s/Solution.sln' ]
Finishing: dotnet workload restore
Я пробовал другие варианты, но ни один из них не работает. Есть ли способ заставить это работать с помощью задачи DotNetCoreCLI@2
?
В настоящее время возвращаюсь к использованию:
- task: CmdLine@2
displayName: "dotnet workload restore"
inputs:
script: 'dotnet workload restore'
Есть ли способ заставить это работать с помощью задачи
DotNetCoreCLI@2
?
Я проверил проблему и обнаружил, что мы можем использовать задачу DotNetCoreCLI@2
, чтобы выполнить dotnet workload restore
как следующий yaml.
- task: DotNetCoreCLI@2
displayName: "dotnet workload restore"
inputs:
command: 'custom'
custom: 'workload'
arguments: 'restore $(solution)'
Результат испытаний:
Обновлять:
Я пробовал это раньше, и я получаю это исключение:
/usr/bin/dotnet workload restore **/*.sln Unhandled exception: Microsoft.Build.Exceptions.InvalidProjectFileException: The project file could not be loaded. Could not find a part of the path '/home/vsts/work/1/s/**/*.sln'. /home/vsts/work/1/s/**/*.sln`
Ошибка указывает на то, что использование подстановочных знаков (**) в путях может не поддерживаться командой dotnet workload restore
. Вы можете использовать прямой путь решения. Например, если мой файл решения находится в папке code
, используйте следующий код yaml.
variables:
solution: "code/AspireSample.sln"
steps:
- task: DotNetCoreCLI@2
displayName: "dotnet workload restore"
inputs:
command: 'custom'
custom: 'workload'
arguments: 'restore $(solution)'
Однако удаление «$(решение)» работает.
Из аргумент ПРОЕКТ | РЕШЕНИЕ, если файл не указан, команда ищет его в текущем каталоге.
Когда я помещаю файл решения в корень каталога и удаляю $(solution)
, все работает. Если файл решения находится не в корневом каталоге, удаление $(solution)
приведет к следующей ошибке: Couldn't find a project.
Привет @Rudi, ошибка указывает на то, что использование подстановочных знаков (**) в путях может не поддерживаться командой восстановления рабочей нагрузки dotnet. Вы можете использовать прямой путь решения. Я обновил более подробную информацию в ответе.
Я пробовал это раньше и получаю следующее исключение: /usr/bin/dotnet workload rest */.sln Необработанное исключение: Microsoft.Build.Exceptions.InvalidProjectFileException: файл проекта не удалось загрузить. Не удалось найти часть пути «/home/vsts/work/1/s/**/*.sln». /home/vsts/work/1/s/**/*.sln Однако удаление «$(solution)» работает ;-)