Почему Azure Pipelines устанавливает неправильную версию .NET SDK (согласно global.json)

У меня есть global.json, который выглядит так:

{
  "sdk": {
    "version": "8.0.301",
    "rollForward": "latestFeature"
  }
}

Насколько я знаю, это означает, что я хочу, чтобы он принимал 8.0.xxx, если он не ниже 8.0.301. Например, и 8.0.302, и 8.0.400 будут работать, а 8.1.x или x.x.x — нет.

Проблема в том, что мой Azure Pipeline хочет установить только 8.0.301. На момент написания доступен 8.0.302 , который поддерживается официальной страницей загрузки Microsoft.

Моя задача конвейера Azure, которая устанавливает .NET SDK, выглядит следующим образом:

- task: UseDotNet@2
  displayName: "Install .NET SDK"
    inputs:
      packageType: sdk
      useGlobalJson: true

Но когда это запускается, я вижу следующие журналы:

Found version 8.0.301 in channel 8.0 for user specified version spec: 8.0.301
Getting URL to download .NET Core sdk version: 8.0.301.
Detecting OS platform to find correct download package for the OS.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "& 'D:\a\_tasks\UseDotNet_b0ce7256-7898-45d3-9cb5-176b752bfea6\2.238.1\externals\get-os-platform.ps1'"
Primary:win-x64
Detected platform (Primary): win-x64
Version 8.0.301 was not found in cache.
Downloading: https://download.visualstudio.microsoft.com/download/pr/7ac2d880-2d57-4008-850e-4b42b829c354/e1c92cb3b6a85f53cab6fa55b14b49e3/dotnet-sdk-8.0.301-win-x64.zip
Extracting downloaded package D:\a\_temp\7024317f-ea64-4710-afa8-0435e0f177ed.
Extracting archive
C:\Windows\system32\chcp.com 65001
Active code page: 65001

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('D:\a\_temp\7024317f-ea64-4710-afa8-0435e0f177ed', 'D:\a\_temp\9404')"

Successfully installed .NET Core sdk version 8.0.301.
Creating global tool path and pre-pending to PATH.
Finishing: Install .NET SDK

Зачем ему устанавливаться 8.0.301, хотя 8.0.302 нужно загрузить?


Для получения дополнительной информации: https://github.com/microsoft/azure-pipelines-tasks/issues/20065

Можете ли вы попробовать еще раз, если вы установите «версию»: «8.0.302» в вашем global.json? это работает?

shindetsu 25.06.2024 16:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

global.json и особенно rollForward служат своей цели:

Файл global.json позволяет определить, какая версия .NET SDK является актуальной. используется при запуске команд .NET CLI.

Это среди уже установленных версий.

Задача Использовать .NET V2 использует global.json по-другому:

Использовать глобальный json. Этот флажок указывает, что все версии из всех Файлы global.json будут использоваться для установки версий SDK. Ты можешь установите корневой путь поиска с помощью рабочего каталога.

Скорее всего, он просто ищет номера версий и не использует повторно политику версий, например rollForward.

Фактически, поскольку вы устанавливаете .NET SDK, а не выбираете, какой из установленных использовать для CLI, все это имеет смысл.

Возможно, вам следует использовать параметр «Версия» задачи, как предложено в документации

Версия*: укажите версию .NET Core SDK или среды выполнения для установки. Это также позволяет вам всегда получать последнюю версию в минорном или мажорном версия. См. примеры ниже. Примеры:

To install 2.2.104 SDK, use 2.2.104
To install 2.2.1 runtime, use 2.2.1
To install 3.0.100-preview3-010431 sdk, use 3.0.100-preview3-010431
To install latest patch version of 2.1 sdk, use 2.1.x
To install latest minor version of 2. sdk, use 2.x
For getting more details about exact version, refer this link.

Итак, для вашего варианта использования, возможно, используйте 8.0.3x. Эксперименты уместны, поскольку в документации версия группы не так ясна.

Привет, Эван, это имеет смысл, но обидно, потому что это означает, что людям придется определять свои версии .NET дважды: как в global.json, так и в задаче конвейера. Хотя я приму ваш ответ. Большое спасибо за ваше время!

S. ten Brinke 25.06.2024 23:14

@S.tenBrinke np, надеюсь, вы сможете прокомментировать, работает ли синтаксис 8.0.3x для последней версии 8.0.302 (у меня нет возможности проверить себя) для дальнейшего использования.

Ivan Petrov 25.06.2024 23:34

Другие вопросы по теме