Мы запускаем автономные агенты для наших конвейеров dev.azure.com. Для некоторых проектов требуются определенные версии NetFramework или NetCore, но мы не хотим устанавливать версии 20-летней давности на все машины с агентами. (Существует множество версий SDK).
Я вижу, что возможности и требования агента обеспечивают функциональность, позволяющую гарантировать запуск сборки только на соответствующем агенте.
Но как мне указать потребность в конкретной версии NetFramework SDK, например. 4.8.1? Я не могу найти список хорошо известных имен возможностей, о которых может сообщить агент.





Не знаю, обладают ли некоторые из ваших агентов такими же возможностями, как у одного из моих агентов в самостоятельно размещенном пуле Default ниже. Если нет, вы можете добавить определяемую пользователем возможность к demand заданию агента для запуска на ожидаемых агентах.
Возьмем, к примеру, мой конвейер YAML: любому заданию агента удалось подобрать ожидаемых агентов.
jobs:
- job: ReferenceSystemCapabilities
pool:
name: Default
demands:
- Agent.OS -equals Windows_NT
- DotNetFramework_4.8.0
- DotNetFramework_4.8.0_x64
steps:
- pwsh: |
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -Name Version,Release -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} |
Select-Object PSChildName, Version, Release
- job: ReferenceUserDefinedCapabilities
pool:
name: Default
demands:
- DotNetFrameworkVersion -equals 4.8.0
steps:
- pwsh: |
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -Name Version,Release -ErrorAction SilentlyContinue |
Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} |
Select-Object PSChildName, Version, Release
Но, к сожалению, у меня есть еще одно препятствие. Возможно, мне нужен другой вопрос: машина с агентом, на которой установлен NetFramework SDK 4.8.1, сообщает только о возможности 4.8.0 и не отличается от машины только с платформой 4.8.0. Но моя машина с установленным net4.8.0 не может собрать проект с <TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
Я вижу, что пользовательскими возможностями на самом деле очень легко управлять, так что да, это сработает.
Привет @ChrisFCarroll! Спасибо, что нашли время поделиться своими мыслями. На самом деле, если на наших машинах с агентами установлено новое программное обеспечение, нам обычно необходимо перезапустить службу агента (для Windows) или запустить сценарий env.sh (для Linux), чтобы отсканировать и обновить новые возможности. Мы могли бы сначала проверить обновления в среде машины агента, а затем проверить, синхронизированы ли эти новые инструменты с вкладкой возможностей агента, что, я думаю, должно быть более удобным для пользователя способом мониторинга и обслуживания наших агентов.
И действительно. определяемые пользователем возможности удобны для выбора ожидаемых агентов, когда отсутствуют известные имена возможностей.
Надеюсь, информация поможет. Считаете ли вы, что вопрос в этом посте решен? Цените ваш обмен.
Я надеюсь на то, что существует список известных системных возможностей, включающий один для Net SDK 4.8.1 :-) Если такого нет, то да, я вскоре приму этот ответ.
Да, я согласен. Кстати, есть ли у вас возможность проверить, есть ли какие-либо обновления в вашей компьютерной среде? Я не так хорошо знаком с установкой DotNetFramework, как с Azure DevOps, но, насколько я понимаю, NetFx 4.8.1 следует обновить в локальной среде компьютера перед сканированием и синхронизацией с Azure DevOps. Я не уверен, но надеюсь, что удаление 4.8.0 не потребуется, поскольку это может повлечь за собой дополнительные работы. >_<!
мы не хотим устанавливать версии 20-летней давности на все машины с агентами
У меня была похожая проблема на одной из моих предыдущих должностей — там были проекты как .NET Framework, так и .NET Core.
Мы решили не использовать требования: все агенты сборки, работающие в определенном пуле агентов, могли запускать любую сборку в этом пуле. Это упростило обслуживание (меньше типов агентов сборки) и предотвратило использование недостаточно используемых агентов сборки в ожидании нескольких сборок, которые будут использовать очень специфическую (и старую) версию .NET Framework или .NET Core.
Что касается .NET Framework, мы установили Visual Studio Build Tools 2022, включая следующие пакеты таргетинга .NET Framework:
Что касается .NET Core, мы рекомендуем разработчикам использовать задачу UseDotNet@2 — пример:
- task: UseDotNet@2
inputs:
version: '3.1.x'
Это решает проблему установки нескольких SDK. Кроме того, использование подстановочных знаков гарантирует, что в конвейерах будет использоваться последняя версия SDK, как только она станет доступна.
Спасибо. Синтаксис запроса DotNetFramework_4.8.0 — это половина того, что мне нужно. Правильно ли я понимаю, что лучший способ узнать, какие возможности системы можно назвать, — это посмотреть на существующих агентов и посмотреть, что они декларируют?